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).