2009-09-18 11 views
6

Czy istnieje skrypt t-sql do znalezienia tabel, które nie są używane w serwerze sql przez przechowywane procudures, widoki, funkcje, itp. Mam bazę danych, która ma 100 tabel, jeśli nie więcej i zanim pójdę upuszczając tabele, chciałem się dowiedzieć, czy istnieje skrypt, który mógłby przejść przez każdy obiekt w bazie danych i powiedzieć mi, czy są używane tabele.skrypt tsql, aby znaleźć tabele nieużywane przez procedury składowane, widoki, funkcje itp.?

+0

Co to jest tabela, która "nie jest używana"? Masz na myśli puste stoły? –

+0

Nie, mam na myśli tabele, które nie są używane w procedurach przechowywanych, widokach, funkcjach itp. Załóżmy, że niedawno stworzyłem bazę danych i ma ona sto stołów, a niektóre stały się przestarzałe, ale nie jestem pewien, więc zanim idź zacząć opuszczać stoły, chcę się dowiedzieć, czy są w użyciu. Nie rozumiem, dlaczego ta kwestia została odrzucona, wydaje się bardzo ważnym i rozsądnym pytaniem. – Xaisoft

+0

Może zmienić tytuł na "Skrypt T-SQL, aby znaleźć tabele, do których nie odwołują się przechowywane procedury, widoki i funkcje." – shufler

Odpowiedz

8

Jeśli chcesz użyć skryptu, here (Listing SQL Server Object Dependencies) to bardzo dobry artykuł na temat zależności między skryptami. Używając tego, możesz utworzyć listę przywoływanych tabel. Masz listę tabel znajdujących się w bazie danych, dzięki czemu wiesz, które z nich nie są używane.

W artykule używają procedury składowanej

sp_depends
. Jednak ma jedną awarię. Na przykład, jeśli masz procedurę przechowywaną, która wykorzystała tabelę "MyTable" i utworzyłeś procedurę przed utworzeniem tabeli "MyTable", nie zobaczysz tego na liście zależności. Dlatego powinieneś przeszukać tabelę pod kątem zależności, aby znaleźć
syscomments
. Ale nie jest to również dokładne, ponieważ jeśli masz nazwę tabeli w komentarzu, potraktujesz ją jako zależność.

4

Jeśli korzystasz ze studia zarządzania, możesz kliknąć tabelę prawym przyciskiem myszy i "wyświetlić zależności".

A tu jest link do artykułu na temat jak to zrobić w TSQL, który zgaduję jest to, czego szukasz:

https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=277

Zawsze można zbudować temp tabeli/var ze wszystkimi tabelami, które mają zależności, i porównaj je ze wszystkimi tabelami, aby zobaczyć, co nie ma żadnych zależności.

8

O ile wiem, nie można polegać na zarządzaniu zależnościami SQL Server. Łukasz wskazał jeden z wielu problemów.

W 2005 roku odpowiednikiem starej tabeli syscomments jest sys.sql_modules.

Aby znaleźć wszystkie nazwy tabel, które nie występują w kodzie TSQL (widoki, SPS, funkcje), skorzystać z tej klauzuli:

select t.name, sys.objects.name foundin, sys.objects.type_desc 
from sys.objects t 
left outer join 
    sys.sql_modules 
    inner join sys.objects on sys.objects.object_id = sys.sql_modules.object_id 
on sys.sql_modules.definition like '%' + t.name + '%' 
where t.type = 'U' 
and sys.objects.name is null 
order by t.name, type_desc, foundin 

Jeśli wykomentuj linię z IS stan NULL, można znaleźć wszystko wystąpienia wszystkich nazw tabel w kodzie TSQL. (bez względu na to, czy nazwa tabeli rzeczywiście odnosi się do tego stołu)

+0

źle wypróbuj to i daj znać jak to działa. – Xaisoft

+0

+1 Szukałem sposobu na znalezienie odniesień do tabel w widokach/procedurach i przy niewielkich modyfikacjach działa to doskonale. –

+0

Działa to całkiem dobrze w przypadku procedur składowanych, ale trzeba rozluźnić ograniczenie t.type = 'U' do t.type IN ('U', 'P') – Roman

Powiązane problemy