Czy ktoś wie sposobu sprawdzania poprawności kwerend we wszystkich procedur przechowywanych w bazie danych? Zastanawiam się nad scenariuszem, w którym jeśli modyfikujesz coś w pliku kodu, po prostu przebudowanie pokazałoby błędy kompilacji, które wskazują miejsca, w których musisz naprawić rzeczy. W scenariuszu bazy danych, powiedz, jeśli zmodyfikujesz tabelę i usuniesz kolumnę, która jest używana w procedurze przechowywanej, nie dowiesz się nic o tym problemie do czasu pierwszego uruchomienia tej procedury.Parsować wszystkie procedury przechowywane w bazie danych
Odpowiedz
To, co opisujesz, dotyczy testów jednostkowych. Przechowywane procedury i funkcje często wymagają ustawienia parametrów, a jeśli procedura składowana lub funkcja zawiera dynamiczny SQL - istnieje ryzyko, że pominięto przypadek [rogu].
Podaje się także, że sprawdzane są podstawowe błędy - nic o sprawdzaniu poprawności zwróconych danych. Na przykład - mogę zmienić dokładność na kolumnie numerycznej ...
To również przechodzi do podstawowego testowania, które powinno nastąpić w przypadku natychmiastowego wydania i testowania regresji, aby upewnić się, że nie występują nieprzewidziane problemy.
Można utworzyć wszystkie obiekty za pomocą SCHEMABINDING, co uniemożliwiłoby zmianę tabel podstawowych bez upuszczania i odtwarzania widoków i procedur zbudowanych na nich.
W zależności od procesu programowania może to być dość uciążliwe. Oferuję to jednak jako rozwiązanie, ponieważ jeśli chcesz zapewnić poprawność wszystkich procedur w db, to by to zrobiło.
Znalazłem ten przykład na MSDN (SQL Server 2012). Myślę, że można go stosować w niektórych scenariuszach:
USE AdventureWorks2012;
GO
SELECT p.name, r.*
FROM sys.procedures AS p
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r;
- 1. Usuń wszystkie przechowywane procedury naraz
- 2. Jak wyświetlić wszystkie niesystemowe procedury przechowywane?
- 3. Przechowywane procedury i funkcje
- 4. MySQL: Widoki a procedury przechowywane
- 5. Funkcje a procedury przechowywane
- 6. Jak zliczyć wszystkie procedury przechowywane na serwerze SQL dla bazy danych?
- 7. Procedury przechowywane w strukturze jednostki
- 8. Jak zidentyfikować wszystkie procedury przechowywane odnoszące się do konkretnej tabeli
- 9. MySQL przechowywane procedury z if
- 10. C#/SQL Pobierz wszystkie przechowywane procedury i ich kod
- 11. W jaki sposób NULL są przechowywane w bazie danych?
- 12. W jaki sposób przechowywane są obiekty wartości w bazie danych?
- 13. Zapisz wynik procedury przechowywane w tabeli zmiennej
- 14. Porównaj daty (przechowywane jako ciąg) w bazie danych Android sqlite?
- 15. Kontrolki sieci ASCX nie są przechowywane w bazie danych
- 16. ASP.NET MVC 2 Lokalizacja/globalizacja przechowywane w bazie danych?
- 17. Znaki Unicode (greckie) są przechowywane w bazie danych, np. "??????"
- 18. Procedury i uprawnienia przechowywane w programie SQL Server
- 19. ALTER wszystkie tabele w bazie danych
- 20. GRANT WYKONAJ wszystkie zapisane procedury.
- 21. Przechowywane procedury w Pythonie dla PostgreSQL
- 22. Procedury przechowywane w MYSQL, jeśli instrukcja Problem
- 23. Jeśli indziej w procedury przechowywane SQL Server
- 24. Czy procedury skryptowe JavaScript przechowywane w MongoDB są szybsze?
- 25. Kod Pierwsze migracje i procedury przechowywane
- 26. Czy procedury przechowywane mogą zwracać zestaw wyników?
- 27. przechowywane procedura działa w bazie danych, ale nie jest w kod C#
- 28. Czy procedury przechowywane blokują tabele/wiersze?
- 29. Jak mogę usunąć wszystkie rekordy w bazie danych w CouchDB?
- 30. Wiadomości zawieszone w Biztalk w bazie danych
możliwe duplikat (http [Jak można programowo sprawdzić (parse) Ważność oświadczenia TSQL?]: // stackoverflow. com/questions/3084387/how-can-i-programme-check-pars-the-validity-of-a-tsql-statement) @CyberDude - Możesz użyć 'SET NOEXEC ON', ale myślę, że najlepszym sposobem jest napisanie narzędzie, które faktycznie próbuje je wykonać i wycofać. –
Sądzę, że mógłbym zbudować skrypt dynamiczny, który wyświetli wszystkie procedury i spróbuje je wykonać. Jedną z interesujących części byłoby wyśmiać wszystkie wymagane parametry ... Innym sposobem byłoby pobranie tekstu procedury i próba wykonania "ZMIANY PROCEDURY", ale bez zmiany niczego w środku. – CyberDude
Analizowanie jest pierwszym użytecznym krokiem i można przeanalizować poprawione procedury składowane, aby sprawdzić ich składnię. Ale załadowanie ich do DB to zrobi, więc nie jest to duża wygrana. Sprawdzenie, czy działają one przy użyciu zwykłej metody, wydaje się dużo bardziej przydatne. Odpowiedź "testowanie jednostkowe" dostarczona przez Kucyki OMG jest całkiem dobra. –