2010-09-18 12 views
6

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

+0

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ć. –

+0

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

+0

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. –

Odpowiedz

4

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.

1

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.

0

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; 

Źródło: sys.dm_exec_describe_first_result_set_for_object

Powiązane problemy