In SQL Server können Sie die sp_tables
verwenden gespeicherte Systemprozedur, um eine Liste der Tabellen und Ansichten in der aktuellen Umgebung abzurufen.
Sie können alle Tabellen und Ansichten zurückgeben oder auf einen bestimmten Besitzer, Typ, Muster oder sogar eine bestimmte Tabelle oder Ansicht eingrenzen.
Syntax
Die Syntax lautet wie folgt:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Alle Argumente sind optional.
Beispiel 1 – Keine Argumente
Sie können diese gespeicherte Prozedur ohne Argumente ausführen. Dadurch werden alle Tabellen und Ansichten in der aktuellen Umgebung zurückgegeben.
So:
EXEC sp_tables;
Dies gibt über 500 Zeilen auf meinem System zurück, daher werde ich die Ergebnisse hier nicht angeben. Es gibt nicht nur benutzerdefinierte Tabellen und Ansichten zurück, sondern auch Systemobjekte wie sys
und INFORMATION_SCHEMA
Tabellen und Ansichten.
Beispiel 2 – Alle Argumente
Das andere Extrem ist hier ein Beispiel, das alle Argumente enthält. Dadurch werden die Ergebnisse auf einen bestimmten Tabellennamen, einen bestimmten Typ, einen bestimmten Qualifizierer und einen bestimmten Eigentümer eingegrenzt.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Ergebnis:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Beispiel 3 – Rückgabe einer bestimmten Tabelle
Eine einfachere Möglichkeit, eine bestimmte Tabelle zurückzugeben, besteht darin, einfach das erste Argument zu verwenden.
So:
EXEC sp_tables @table_name = 'Customers';
Oder noch präziser, so wie hier:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Beachten Sie jedoch, dass Sie mehr als eine Zeile erhalten können. In diesem Beispiel werden zwei Zeilen zurückgegeben:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
Die erste Zeile ist für eine Tabelle und die zweite Zeile für eine Ansicht.
Wenn ich nicht daran interessiert wäre, Ansichten oder Systemtabellen zu sehen, könnte ich ein weiteres Argument hinzufügen, um den Tabellentyp anzugeben.
Beispiel 4 – Einen bestimmten Tabellentyp zurückgeben
Hier verfeinere ich das vorherige Beispiel, indem ich nur den Tabellentyp angebe, an dem ich interessiert bin, zusammen mit dem Namen der Tabelle.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Ergebnis:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Zu den akzeptablen Typen gehört VIEW
, TABLE
, und SYSTEMTABLE
.
Beachten Sie, dass Tabellentypen in Großbuchstaben geschrieben werden müssen.
Beispiel 5 – Mehrere Tabellentypen zurückgeben
Sie haben vielleicht bemerkt, dass die Syntax für den Tabellentyp einfache Anführungszeichen und verwendet Anführungszeichen. Dies liegt daran, dass es eine durch Kommas getrennte Liste von Tabellentypen akzeptiert. Die gesamte Liste wird in doppelte Anführungszeichen eingeschlossen, und jedes Listenelement wird in einfache Anführungszeichen eingeschlossen, wobei jedes Element durch ein Komma getrennt wird.
Hier ist ein Beispiel für die Rückgabe von Tabellentypen TABLE
und VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Beachten Sie, dass wenn SET QUOTED_IDENTIFIER
ist ON
, muss jedes einfache Anführungszeichen verdoppelt werden und der gesamte Parameter muss in einfache Anführungszeichen eingeschlossen werden.
Beispiel 6 – Eine Anmerkung zum Tabellenqualifikator-Argument
Wenn Sie den @table_qualifier
verwenden -Argument muss sein Wert mit dem der aktuellen Umgebung übereinstimmen, andernfalls erhalten Sie einen Fehler. In SQL Server stellt der Tabellenqualifizierer den Datenbanknamen dar. In einigen Produkten stellt es den Servernamen der Datenbankumgebung der Tabelle dar.
Folgendes passiert in SQL Server, wenn ich einen Wert verwende, der sich von der aktuellen Datenbank unterscheidet:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Ergebnis:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86 The database name component of the object qualifier must be the name of the current database.
Beispiel 7 – Platzhalter
Sie können das @fUsePattern
verwenden Argument, um anzugeben, ob der Unterstrich ( _
), Prozent ( %
) und Klammer ( [
oder ]
) Zeichen werden als Platzhalterzeichen interpretiert. Gültige Werte sind 0
(Mustervergleich ist aus) und 1
(Musterabgleich ist eingeschaltet). Der Standardwert ist 1
.
Hier ist ein Beispiel für die Verwendung des Musterabgleichs, um Tabellennamen zurückzugeben, die mit dem Buchstaben „A“ beginnen:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Ergebnis:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Aber Folgendes passiert, wenn ich den Musterabgleich deaktiviere:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Ergebnis:
(0 rows affected)