Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Retornar informações de coluna de um servidor vinculado no SQL Server (exemplos de T-SQL)


No SQL Server você pode usar o sp_columns_ex procedimento armazenado do sistema para retornar informações de coluna sobre as colunas de um servidor vinculado especificado.

Você pode especificar uma coluna individual ou pode especificar todas as colunas de um determinado banco de dados, tabela etc.


Sintaxe


A sintaxe fica assim:
sp_columns_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column' ]   
     [ , [ @ODBCVer = ] 'ODBCVer' ]

O @table_server argumento é o único argumento necessário. Este é o nome do servidor vinculado do qual você deseja obter as informações da tabela.

Os outros argumentos são opcionais e abordo a maioria deles nos exemplos a seguir. Para obter mais informações sobre esses argumentos, consulte a documentação da Microsoft.

Exemplo 1 – Retornar uma coluna específica


O exemplo a seguir retorna informações sobre uma coluna específica.
EXEC sp_columns_ex 
  @table_server = 'Homer',   
  @table_name = 'Artists',   
  @table_schema = 'dbo',   
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Resultado (usando saída vertical):
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

Neste caso, o nome do servidor é Homer , o nome do banco de dados é Music , o nome da tabela é Artists , o esquema da tabela é dbo e o nome da coluna é ArtistName .

Isso também poderia ser feito assim:
EXEC sp_columns_ex 
  'Homer',   
  'Artists',   
   'dbo',   
  'Music',   
  'ArtistName';

Exemplo 2 – Especificar apenas uma tabela


Neste exemplo, especifico apenas o nome da tabela.
EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_name = 'Artists';

Isso retorna informações sobre todas as colunas em Artistas tabela.

Exemplo 3 – Especifique o banco de dados e o nome da coluna


Neste exemplo, especifico o banco de dados e a coluna, mas não a tabela.
EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music',   
  @column_name = 'ArtistName';

Resultados (usando saída vertical):
-[ 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

Isso retornou mais três colunas. Estes são de três visualizações diferentes (o banco de dados tem três visualizações com um ArtistName coluna:BluesAlbums , JazzAlbums e RockAlbums ).

Exemplo 4 – Especificar apenas um banco de dados


Aqui eu especifico apenas o banco de dados:
EXEC sp_columns_ex 
  @table_server = 'Homer', 
  @table_catalog = 'Music';

Não exibirei os resultados aqui porque ele retornou quase 6.000 linhas. A maioria deles era do sys esquema da tabela.

Exemplo 5 – Especificar um esquema de tabela


O exemplo a seguir restringe os resultados a um esquema de tabela específico (dbo ).
EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Isso retornou um conjunto de resultados muito menor do que o exemplo anterior. Ainda é muito grande, então não vou exibi-lo aqui.

Exemplo 6 – Caracteres curinga


Você também pode usar caracteres curinga. Aqui está um exemplo de uso do % caractere curinga:
EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Isso retorna todas as colunas que começam com Ar . No meu caso, ele retornou dois ArtistId colunas e quatro ArtistName colunas.

Eu poderia restringir isso:
EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%Name';

Isso retornou apenas o ArtistName colunas.

No entanto, se eu remover o r :
EXEC sp_columns_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'A%Name';

Agora recebo quatro colunas extras chamadas AlbumName (assim como o ArtistName colunas).