sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera en lista med tabeller från en länkad server i SQL Server (T-SQL-exempel)

I SQL Server kan du använda sp_tables_ex systemlagrad procedur för att returnera tabellinformation om tabellerna från en specificerad länkad server.

Det enklaste sättet att utföra denna lagrade procedur är att skicka namnet på den länkade servern. Om du gör det returneras alla tabeller från standarddatabasen på den angivna länkade servern, inklusive systemtabeller och vyer. Det här kan bli en stor lista.

Du har också möjlighet att ange en annan databas och/eller ett specifikt tabellschema. Du kan också filtrera resultaten baserat på tabelltypen (t.ex. tabell, vy, systemtabell, etc).

Syntax

Syntaxen ser ut så här:

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' ]

@table_server argument är det enda nödvändiga argumentet. Detta är namnet på den länkade servern som du vill ha tabellinformationen från.

De andra argumenten är valfria, och jag täcker dem i följande exempel. Mer information om dessa argument finns i Microsofts dokumentation.

Exempel 1 – Returnera alla tabeller

Följande exempel returnerar alla tabeller, vyer, systemtabeller, alias etc från standarddatabasen på den länkade servern som heter Homer.

EXEC sp_tables_ex 'Homer';

Detta returnerar hundratals rader på mitt system, så jag kommer inte att lista resultaten i det här exemplet. Kom ihåg att de flesta av dessa rader är systemtabeller och systemvyer.

Detta kan också göras så här:

EXEC sp_tables_ex @table_server = 'Homer';

Exempel 2 – Ange en annan databas

Följande exempel anger att WideWorldImportersDW databas ska användas.

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

Återigen, detta returnerar hundratals rader, så jag kommer inte att lista resultaten.

Exempel 3 – Returnera en specifik tabell

I det här exemplet returnerar jag information om en specifik tabell.

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

Resultat:

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

Exempel 4 – Endast returvisningar

I det här exemplet anger jag att endast vyer ska returneras.

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

Resultat:

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

Observera att dessa inte inkluderar systemvyer. Om jag ville returnera systemvyer skulle jag ha använt @table_type = 'SYSTEM VIEW' (och resultatuppsättningen skulle vara mycket större).

@table_type argument accepterar följande typer:ALIAS , GLOBAL TEMPORARY , LOCAL TEMPORARY , SYNONYM , SYSTEM TABLE , SYSTEM VIEW , TABLE och VIEW .

Exempel 5 – Ange ett tabellschema

Följande exempel begränsar resultaten till ett specifikt tabellschema (Dimension ) inom WideWorldImportersDW databas.

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

Resultat:

+----------------------+---------------+------------------+--------------+-----------+
| 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      |
+----------------------+---------------+------------------+--------------+-----------+

Exempel 6 – Jokertecken

@fUsePattern argument låter dig ange om % eller inte , _ , [ och ] tecken tolkas som jokertecken.

Standardvärdet är 1 , vilket betyder att de är tolkas som jokertecken. Du kan ange 0 för att ange att de inte ska tolkas som jokertecken.

Här är ett exempel på hur du använder ett jokertecken:

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

Resultat:

+----------------------+---------------+------------------+--------------+-----------+
| 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      |
+----------------------+---------------+------------------+--------------+-----------+

Och här är vad som händer om jag inte anger några jokertecken:

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

Resultat:

(0 rows affected)
Time: 0.324s

  1. MySQL Ta bort dubbletter av poster

  2. INSERT INTO ... FRÅN SELECT ... RETURNERAR ID-mappningar

  3. Hur förfinar man utdata som kommer från SELECT-frågan i kommandotolken?

  4. Så här skapar du ett formulär från en tabell i Access 2016