2009-09-18 13 views
6

Gibt es ein T-SQL-Skript, um Tabellen zu finden, die nicht in Sql-Server von gespeicherten procudures, Ansichten, Funktionen usw. verwendet werden. Ich habe eine Datenbank, die 100s von Tabellen hat, wenn nicht mehr und bevor ich gehe Ich wollte wissen, ob es ein Skript gibt, das durch jedes Objekt in der Datenbank gehen und mir sagen kann, ob irgendwelche Tabellen benutzt werden.tsql-Skript, um Tabellen zu finden, die nicht von gespeicherten Prozeduren, Ansichten, Funktionen usw. verwendet werden?

+0

Was ist die Tabelle, die "nicht verwendet wird"? Du meinst leere Tische? –

+0

Nein, ich meine Tabellen, die nicht in gespeicherten Prozeduren, Ansichten, Funktionen usw. verwendet werden. Nehmen wir an, ich habe vor einiger Zeit eine Datenbank erstellt und sie hat 100 Tabellen und einige sind veraltet, aber ich bin mir nicht sicher, also vor mir Geh und fang an, Tische fallen zu lassen, ich möchte herausfinden, ob sie benutzt werden. Ich verstehe nicht, warum diese Frage abgelehnt wurde, scheint eine sehr gültige und vernünftige Frage zu sein. – Xaisoft

+0

Ändern Sie den Titel möglicherweise in "T-SQL-Skript, um Tabellen zu finden, auf die keine gespeicherten Prozeduren, Sichten und Funktionen verweisen." – shufler

Antwort

8

Wenn Sie ein Skript verwenden möchten, ist here (Listing SQL Server Object Dependencies) ein sehr guter Artikel, Skripts Abhängigkeiten. Damit können Sie eine Liste von referenzierten Tabellen erstellen. Sie haben die Liste der Tabellen in Ihrer Datenbank, damit Sie wissen, welche nicht verwendet werden.

In dem Artikel verwenden sie

sp_depends
gespeicherte Prozedur. Es hat jedoch einen Fehler. Wenn Sie beispielsweise eine gespeicherte Prozedur verwenden, die die Tabelle "MyTable" verwendet, und Sie die Prozedur erstellen, bevor Sie die Tabelle "MyTable" erstellen, wird dies in der Liste der Abhängigkeiten nicht angezeigt. Deshalb sollten Sie in der Tabelle
syscomments
nach Abhängigkeiten suchen. Aber das ist auch nicht korrekt, denn wenn Sie den Namen der Tabelle im Kommentar haben, werden Sie ihn als Abhängigkeit behandeln.

4

Wenn Sie Management Studio verwenden, können Sie mit der rechten Maustaste auf eine Tabelle klicken und Abhängigkeiten anzeigen.

Und hier ist ein Link zu einem Artikel auf, wie dies in Tsql zu tun, was ich vermute, ist das, was Sie suchen:

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

Man kann immer eine temporäre Tabelle aufbauen/var mit allen Tabellen, die Abhängigkeiten haben, und vergleichen Sie es mit allen Tabellen, um zu sehen, was keine Abhängigkeiten hat.

8

Soweit ich weiß, können Sie sich nicht wirklich auf das Abhängigkeitsmanagement von SQL Server verlassen. Lukasz wies auf eines der vielen Probleme hin.

Im Jahr 2005 ist das Äquivalent der alten Tabelle syscomments sys.sql_modules.

Um alle Tabellennamen zu finden, die in T-SQL-Code nicht auftreten (Views, SPs, Funktionen), verwenden Sie diese Aussage:

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 

Wenn Sie die Zeile auf Kommentar mit der NULL-Zustand befindet, finden Sie alle Vorkommen aller Tabellennamen im TSQL-Code. (Egal, ob der Tabellenname wirklich auf diese Tabelle verweist)

+0

Ich werde dies ausprobieren und Sie wissen lassen, wie es funktioniert. – Xaisoft

+0

+1 Ich suchte nach einer Möglichkeit, Tabellenreferenzen innerhalb von Ansichten/Prozeduren zu finden, und mit kleinen Änderungen funktioniert das perfekt dafür. –

+0

Dies funktioniert ziemlich gut für gespeicherte Prozeduren, aber Sie müssen die t.type = 'U' Einschränkung auf t.type IN ('U', 'P') entspannen – Roman

Verwandte Themen