sql >> Databasteknik >  >> RDS >> Sqlserver

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

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

Du kan ange en enskild kolumn, eller så kan du ange alla kolumner från en given databas, tabell, etc.

Syntax

Syntaxen ser ut så här:

sp_columns_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column' ]   
     [ , [ @ODBCVer = ] 'ODBCVer' ]

@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 de flesta av dem i följande exempel. Mer information om dessa argument finns i Microsofts dokumentation.

Exempel 1 – Returnera en specifik kolumn

Följande exempel returnerar information om en specifik kolumn.

EXEC sp_columns_ex 
  @table_server = 'Homer',   
  @table_name = 'Artists',   
  @table_schema = 'dbo',   
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Resultat (med vertikal utdata):

TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_RADIX    | NULL
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 510
ORDINAL_POSITION  | 2
IS_NULLABLE       | NO
SS_DATA_TYPE      | 39

I det här fallet är servernamnet Homer , databasens namn är Music , tabellnamnet är Artists , tabellschemat är dbo och kolumnnamnet är ArtistName .

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

EXEC sp_columns_ex 
  'Homer',   
  'Artists',   
   'dbo',   
  'Music',   
  'ArtistName';

Exempel 2 – Ange endast en tabell

I det här exemplet anger jag bara tabellnamnet.

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_name = 'Artists';

Detta returnerar information om alla kolumner i Artister tabell.

Exempel 3 – Ange databas- och kolumnnamn

I det här exemplet anger jag databasen och kolumnen, men inte tabellen.

EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Resultat (med vertikal utdata):

-[ RECORD 1 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | Artists
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_RADIX    | NULL
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 510
ORDINAL_POSITION  | 2
IS_NULLABLE       | NO
SS_DATA_TYPE      | 39
-[ RECORD 2 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | BluesAlbums
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_RADIX    | NULL
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 510
ORDINAL_POSITION  | 2
IS_NULLABLE       | NO
SS_DATA_TYPE      | 39
-[ RECORD 3 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | JazzAlbums
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_RADIX    | NULL
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 510
ORDINAL_POSITION  | 2
IS_NULLABLE       | NO
SS_DATA_TYPE      | 39
-[ RECORD 4 ]-------------------------
TABLE_CAT         | Music
TABLE_SCHEM       | dbo
TABLE_NAME        | RockAlbums
COLUMN_NAME       | ArtistName
DATA_TYPE         | -9
TYPE_NAME         | nvarchar
COLUMN_SIZE       | 255
BUFFER_LENGTH     | 510
DECIMAL_DIGITS    | NULL
NUM_PREC_RADIX    | NULL
NULLABLE          | 0
REMARKS           | NULL
COLUMN_DEF        | NULL
SQL_DATA_TYPE     | -9
SQL_DATETIME_SUB  | NULL
CHAR_OCTET_LENGTH | 510
ORDINAL_POSITION  | 2
IS_NULLABLE       | NO
SS_DATA_TYPE      | 39

Detta gav ytterligare tre kolumner. Dessa råkar vara från tre olika vyer (databasen har tre vyer med ett ArtistName). kolumn:BluesAlbums , JazzAlbums , och RockAlbums ).

Exempel 4 – Ange endast en databas

Här anger jag bara databasen:

EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music';

Jag kommer inte att visa resultaten här eftersom det gav nästan 6 000 rader. De flesta av dessa var från sys tabellschema.

Exempel 5 – Ange ett tabellschema

Följande exempel begränsar resultaten till ett specifikt tabellschema (dbo ).

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Detta gav en mycket mindre resultatuppsättning än föregående exempel. Den är fortfarande ganska stor, så jag kommer inte visa den här.

Exempel 6 – Jokertecken

Du kan också använda jokertecken. Här är ett exempel på hur du använder % jokertecken:

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Detta returnerar alla kolumner som börjar med Ar . I mitt fall returnerade den två ArtistId kolumner och fyra Artistnamn kolumner.

Jag skulle kunna begränsa detta:

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%Name';

Detta returnerade bara Artistnamn kolumner.

Men om jag tar bort r :

EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'A%Name';

Jag får nu fyra extra kolumner som heter AlbumName (liksom Artistnamn kolumner).


  1. Skillnaden mellan SYSDATE() och NOW() i MariaDB

  2. Hur man konverterar en Microsoft Access-rapport till PDF (3 sätt)

  3. Hur man installerar MariaDB 10 på RHEL 8

  4. FATAL:lösenordsautentisering misslyckades för användare postgres (postgresql 11 med pgAdmin 4)