Database
 sql >> Datenbank >  >> RDS >> Database

5 Möglichkeiten zum Auflisten temporärer Tabellen mit T-SQL

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 '#%';