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