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

Zurückgeben einer Tabellenliste von einem Verbindungsserver in SQL Server (T-SQL-Beispiele)

In SQL Server können Sie den sp_tables_ex verwenden gespeicherte Systemprozedur, um Tabelleninformationen zu den Tabellen von einem angegebenen Verbindungsserver zurückzugeben.

Die einfachste Möglichkeit, diese gespeicherte Prozedur auszuführen, besteht darin, den Namen des Verbindungsservers zu übergeben. Dadurch werden alle Tabellen aus der Standarddatenbank auf dem angegebenen Verbindungsserver zurückgegeben, einschließlich Systemtabellen und Ansichten. Dies könnte eine lange Liste werden.

Sie haben auch die Möglichkeit, eine andere Datenbank und/oder ein bestimmtes Tabellenschema anzugeben. Sie können die Ergebnisse auch basierend auf dem Tabellentyp filtern (z. B. Tabelle, Ansicht, Systemtabelle usw.).

Syntax

Die Syntax lautet wie folgt:

sp_tables_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]  
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @table_type = ] 'table_type' ]   
     [ , [@fUsePattern = ] 'fUsePattern' ]

Der @table_server Argument ist das einzige erforderliche Argument. Dies ist der Name des Verbindungsservers, von dem Sie die Tabelleninformationen erhalten möchten.

Die anderen Argumente sind optional und werden in den folgenden Beispielen behandelt. Weitere Informationen zu diesen Argumenten finden Sie in der Microsoft-Dokumentation.

Beispiel 1 – Alle Tabellen zurückgeben

Das folgende Beispiel gibt alle Tabellen, Ansichten, Systemtabellen, Aliase usw. aus der Standarddatenbank auf dem Verbindungsserver namens Homer zurück.

EXEC sp_tables_ex 'Homer';

Dies gibt Hunderte von Zeilen auf meinem System zurück, daher werde ich die Ergebnisse in diesem Beispiel nicht auflisten. Denken Sie daran, dass die meisten dieser Zeilen Systemtabellen und Systemansichten sind.

Dies könnte auch so geschehen:

EXEC sp_tables_ex @table_server = 'Homer';

Beispiel 2 – Geben Sie eine andere Datenbank an

Das folgende Beispiel gibt an, dass die Datei WideWorldImportersDW Datenbank verwendet werden soll.

EXEC sp_tables_ex 
  @table_server = 'Homer',   
  @table_catalog = 'WideWorldImportersDW';

Auch hier werden Hunderte von Zeilen zurückgegeben, daher werde ich die Ergebnisse nicht auflisten.

Beispiel 3 – Rückgabe einer bestimmten Tabelle

In diesem Beispiel gebe ich Informationen zu einer bestimmten Tabelle zurück.

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',
  @table_name = 'Artists';

Ergebnisse:

+-------------+---------------+--------------+--------------+-----------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------+---------------+--------------+--------------+-----------|
| Music       | dbo           | Artists      | TABLE        | NULL      |
+-------------+---------------+--------------+--------------+-----------+

Beispiel 4 – Nur Aufrufe zurückgeben

In diesem Beispiel gebe ich an, dass nur Aufrufe zurückgegeben werden sollen.

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',
  @table_type = 'VIEW';

Ergebnisse:

+-------------+---------------+--------------+--------------+-----------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------+---------------+--------------+--------------+-----------|
| Music       | dbo           | BluesAlbums  | VIEW         | NULL      |
| Music       | dbo           | JazzAlbums   | VIEW         | NULL      |
| Music       | dbo           | RockAlbums   | VIEW         | NULL      |
+-------------+---------------+--------------+--------------+-----------+

Beachten Sie, dass diese keine Systemansichten enthalten. Wenn ich Systemansichten zurückgeben wollte, hätte ich @table_type = 'SYSTEM VIEW' verwendet (und die Ergebnismenge wäre viel größer).

Der @table_type Das Argument akzeptiert die folgenden Typen:ALIAS , GLOBAL TEMPORARY , LOCAL TEMPORARY , SYNONYM , SYSTEM TABLE , SYSTEM VIEW , TABLE , und VIEW .

Beispiel 5 – Geben Sie ein Tabellenschema an

Das folgende Beispiel grenzt die Ergebnisse auf ein bestimmtes Tabellenschema ein (Dimension ) im WideWorldImportersDW Datenbank.

EXEC sp_tables_ex 
  @table_server = 'Homer',   
  @table_catalog = 'WideWorldImportersDW',   
  @table_schema = 'Dimension';

Ergebnisse:

+----------------------+---------------+------------------+--------------+-----------+
| TABLE_CAT            | TABLE_SCHEM   | TABLE_NAME       | TABLE_TYPE   | REMARKS   |
|----------------------+---------------+------------------+--------------+-----------|
| WideWorldImportersDW | Dimension     | City             | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Customer         | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Date             | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Employee         | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Payment Method   | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Stock Item       | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Supplier         | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Transaction Type | TABLE        | NULL      |
+----------------------+---------------+------------------+--------------+-----------+

Beispiel 6 – Platzhalterzeichen

Das @fUsePattern Mit dem Argument können Sie angeben, ob der % , _ , [ , und ] Zeichen werden als Platzhalterzeichen interpretiert.

Der Standardwert ist 1 , was bedeutet, dass sie sind als Platzhalterzeichen interpretiert. Sie können 0 angeben um festzulegen, dass sie nicht sollten als Platzhalterzeichen interpretiert werden.

Hier ist ein Beispiel für die Verwendung eines Platzhalterzeichens:

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'WideWorldImportersDW',
  @table_name = 'C%',
  @table_type = 'TABLE',
  @fUsePattern = 1;

Ergebnisse:

+----------------------+---------------+------------------+--------------+-----------+
| TABLE_CAT            | TABLE_SCHEM   | TABLE_NAME       | TABLE_TYPE   | REMARKS   |
|----------------------+---------------+------------------+--------------+-----------|
| WideWorldImportersDW | Dimension     | City             | TABLE        | NULL      |
| WideWorldImportersDW | Dimension     | Customer         | TABLE        | NULL      |
| WideWorldImportersDW | Integration   | City_Staging     | TABLE        | NULL      |
| WideWorldImportersDW | Integration   | Customer_Staging | TABLE        | NULL      |
+----------------------+---------------+------------------+--------------+-----------+

Und Folgendes passiert, wenn ich keine Platzhalterzeichen spezifiziere:

EXEC sp_tables_ex 
  @table_server = 'Homer', 
  @table_catalog = 'WideWorldImportersDW',
  @table_name = 'C%',
  @table_type = 'TABLE',
  @fUsePattern = 0;

Ergebnisse:

(0 rows affected)
Time: 0.324s