Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zurückgeben einer Liste von Tabellen und Ansichten in SQL Server mit T-SQL (sp_tables)

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)