In SQL Server können Sie eine der folgenden fünf Möglichkeiten verwenden, um eine Liste temporärer Tabellen mit Transact-SQL zurückzugeben.
Diese geben sowohl lokale als auch globale temporäre Tabellen zurück.
Option 1 – sys.tables
Die sys.tables
Die Systemkatalogansicht wurde speziell für die Rückgabe von Tabelleninformationen entwickelt.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
Wie bei allen Ansichten auf dieser Seite möchten wir Informationen über vorübergehend Tabellen, müssen wir diese Ansicht in der tempdb abfragen Datenbank. Wir können dies tun, indem wir entweder zuerst zu dieser Datenbank wechseln (so dass es unsere aktuelle Datenbank ist) oder unsere Abfrage mit dem Datenbanknamen qualifizieren.
In diesem Beispiel qualifiziere ich die Abfrage mit dem Datenbanknamen.
Option 2 – sys.objects
Sie können auch die sys.objects
verwenden Systemkatalogansicht. Wenn Sie diese Option auswählen, müssen Sie sie nach Typ filtern, sodass nur Benutzertabellen zurückgegeben werden.
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
Das U
steht für „Benutzertabelle“. Alternativ dazu können Sie WHERE type_desc = 'USER_TABLE'
verwenden .
Option 3 – INFORMATION_SCHEMA.TABLES
Wenn Sie eine ANSI-Standardoption wünschen, verwenden Sie INFORMATION_SCHEMA.TABLES
Aussicht. Wenn Sie diese Option wählen, müssen Sie sie auch nach Typ filtern, sodass nur „Basistabellen“ zurückgegeben werden.
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
Option 4 – sp_tables
Wenn Sie nach einer Option für gespeicherte Prozeduren suchen, ist die Datei sp_tables
gespeicherte Prozedur wird den Zweck erfüllen.
USE tempdb; EXEC sp_tables '#%';
Sie können die Argumentnamen auch explizit einschließen.
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
Sie werden feststellen, dass ich zu tempdb gewechselt bin bevor Sie diese Prozedur ausführen, obwohl ich die Datenbank als eines der Argumente angegeben habe. Dies ist tatsächlich erforderlich. Der @table_qualifier
Argument muss mit der aktuellen Datenbank übereinstimmen.
Beachten Sie auch, dass das @fUsePattern
pattern muss in diesem Fall 1 sein, da ich einen Wildcard-Operator im Tabellennamen verwende. Setzen Sie es auf 1
ermöglicht den Musterabgleich. Auf 0
setzen würde den Musterabgleich deaktivieren.
Option 5 – dbo.sysobjects
Dies sollte wahrscheinlich keine Option sein, aber ich werde es trotzdem auflisten. Die dbo.sysobjects
view ist nur aus Gründen der Abwärtskompatibilität in SQL Server enthalten. Es wurde als veraltet gekennzeichnet und Microsoft rät davon ab, es zu verwenden. Wenn Sie in Ihrem Code darauf stoßen, ziehen Sie vielleicht in Betracht, es in eine der vorherigen Optionen zu ändern.
Auf jeden Fall sieht es so aus:
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
Wenn Sie sich fragen, wofür der doppelte Punkt ist (..
), ist es eine schnelle Möglichkeit, das Standardschema anzugeben. In diesem Fall ist das Standardschema dbo
, also könnten wir auch Folgendes schreiben:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';