Spis treści:

Kategoria:SQL Server


Jak znaleźć wszystkie procedury składowane korzystające z danej tabeli

Zmiana w strukturze jednej tabeli może sprawić, że napisane wcześniej procedury przestaną się wykonywać. Jeżeli w bazie danych mamy kilka procedur stworzonych niedawno i wszystkie były przez nas pisane, wtedy nie ma żadnego problemu. Najprawdopodobniej znamy zastosowanie każdej i możemy szybko zweryfikować, czy będą one dalej działały. Jeżeli baza tworzona była przez kogoś innego lub ma kilkadziesiąt, czy nawet kilkaset procedur - wtedy jest problem. Weryfikacja może okazać się przydatna.

Podejrzewam, że w większości przypadków wystarczy zapytanie zaprezentowane poniżej:

SELECT name FROM sys.syscomments SC
JOIN sys.objects SO ON SC.id=SO.[object_id]
WHERE [type]='P' AND [text] LIKE '%Tabela%'

Procedura przeszukuje tabelę sys.syscomments, gdzie znajdują się wpisy wszystkich widoków, więzów integralności, a także szukanych przez nas procedur składowanych. Warunek jest prosty - jeżeli w tekście skryptu znajduje się nazwa tabeli, zwracana jest nazwa procedury. Dodatkowy warunek to porównanie typu obiektu ze stałą P, która oznacza właśnie procedury składowane. Można ten warunek oczywiście pominąć, ale wtedy zapytanie zwróci nam też inne obiekty, w których występuje ciąg znaków reprezentujący nazwę tabeli (być może o to nam właśnie chodzi).

Pobranie przestrzeni procedury korzystającej z tabeli

Jeżeli w bazie danych jest bardzo dużo procedur i są one umieszczone w różnych przestrzeniach (schema), wtedy bardziej przydatne może się okazać zapytanie zaprezentowane poniżej:

SELECT SS.name+'.'+SO.name FROM sys.syscomments SC
JOIN sys.objects SO ON SC.id=SO.[object_id]
JOIN sys.schemas SS ON SO.[schema_id]=SS.[schema_id]
WHERE [type]='P' AND [text] LIKE '%Tabela%'

W tym przypadku zwracana jest nazwa tabeli poprzedzona nazwą przestrzeni. Nazwy oddzielone są kropką, tak jak w każdym standardowym skrypcie.

Ciekaw jestem, czy znacie jakieś inne, być może lepsze metody weryfikacji. Zachęcam do dzielenia się nimi w komentarzach.

Kategoria:SQL Server

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
To samo pytanie co wyżej. Mam za zadanie dodać kolumnę do istniejącej tabeli łącząc obie inne kolumny ze sobą, ale nie mam pojęcia jak za to się zabrać
działa :) tylko była literówka :)
Podziękował. Trochę późno, po 8 latach, ale dzięki za testy (rozumiem że dla SQL2012 robione). Tak się właśnie zastanawiałem ile złego czynię stosując czasem __(max).
Super robota, korzystając z innych internetowych kalkulatorow po prostu wątpiłem w ich prawdomówność, w końcu trafiłem tutaj i wynik w końcu jest wiarygodny. 40 km w 2 h 810 kcal, ciekawostka: na fitatu wyliczyło mi 5700 kcal 😊 najlepiej będzie chyba jak kupię zegarek sportowy.
Wielkie dzieki za solidne wyjasnienia tematu.