No SQL Server você pode usar o
sp_tables_ex
procedimento armazenado do sistema para retornar informações de tabela sobre as tabelas de um servidor vinculado especificado. A maneira mais simples de executar esse procedimento armazenado é passar o nome do servidor vinculado. Fazer isso retornará todas as tabelas do banco de dados padrão no servidor vinculado especificado, incluindo tabelas e visualizações do sistema. Esta pode ser uma grande lista.
Você também tem a opção de especificar um banco de dados diferente e/ou um esquema de tabela específico. Você também pode filtrar os resultados com base no tipo de tabela (por exemplo, tabela, exibição, tabela do sistema etc.).
Sintaxe
A sintaxe fica assim:
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' ]
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 eu os abordo nos exemplos a seguir. Para obter mais informações sobre esses argumentos, consulte a documentação da Microsoft.
Exemplo 1 – Retornar todas as Tabelas
O exemplo a seguir retorna todas as tabelas, exibições, tabelas do sistema, aliases, etc. do banco de dados padrão no servidor vinculado chamado Homer.
EXEC sp_tables_ex 'Homer';
Isso retorna centenas de linhas no meu sistema, então não vou listar os resultados neste exemplo. Lembre-se de que a maioria dessas linhas são tabelas do sistema e visualizações do sistema.
Isso também poderia ser feito assim:
EXEC sp_tables_ex @table_server = 'Homer';
Exemplo 2 – Especificar um banco de dados diferente
O exemplo a seguir especifica que o
WideWorldImportersDW
banco de dados deve ser usado. EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW';
Novamente, isso retorna centenas de linhas, então não vou listar os resultados.
Exemplo 3 – Retornar uma tabela específica
Neste exemplo, retorno informações sobre uma tabela específica.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'Music', @table_name = 'Artists';
Resultados:
+-------------+---------------+--------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------+---------------+--------------+--------------+-----------| | Music | dbo | Artists | TABLE | NULL | +-------------+---------------+--------------+--------------+-----------+
Exemplo 4 – Retornar apenas visualizações
Neste exemplo, especifico que apenas as visualizações devem ser retornadas.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'Music', @table_type = 'VIEW';
Resultados:
+-------------+---------------+--------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------+---------------+--------------+--------------+-----------| | Music | dbo | BluesAlbums | VIEW | NULL | | Music | dbo | JazzAlbums | VIEW | NULL | | Music | dbo | RockAlbums | VIEW | NULL | +-------------+---------------+--------------+--------------+-----------+
Observe que eles não incluem visualizações do sistema. Se eu quisesse retornar visualizações do sistema, teria usado
@table_type = 'SYSTEM VIEW'
(e o conjunto de resultados seria muito maior). O
@table_type
argumento aceita os seguintes tipos:ALIAS
, GLOBAL TEMPORARY
, LOCAL TEMPORARY
, SYNONYM
, SYSTEM TABLE
, SYSTEM VIEW
, TABLE
e VIEW
. Exemplo 5 – Especificar um esquema de tabela
O exemplo a seguir restringe os resultados a um esquema de tabela específico (
Dimension
) dentro do WideWorldImportersDW
base de dados. EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_schema = 'Dimension';
Resultados:
+----------------------+---------------+------------------+--------------+-----------+ | 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 | +----------------------+---------------+------------------+--------------+-----------+
Exemplo 6 – Caracteres curinga
O
@fUsePattern
O argumento permite que você especifique se o %
, _
, [
e ]
caracteres são interpretados como caracteres curinga. O valor padrão é
1
, o que significa que eles são interpretados como caracteres curinga. Você pode especificar 0
para especificar que eles não ser interpretados como caracteres curinga. Aqui está um exemplo de uso de um caractere curinga:
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_name = 'C%', @table_type = 'TABLE', @fUsePattern = 1;
Resultados:
+----------------------+---------------+------------------+--------------+-----------+ | 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 | +----------------------+---------------+------------------+--------------+-----------+
E aqui está o que acontece se eu não especificar caracteres curinga:
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_name = 'C%', @table_type = 'TABLE', @fUsePattern = 0;
Resultados:
(0 rows affected) Time: 0.324s