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

Retornar uma lista de tabelas de um servidor vinculado no SQL Server (Exemplos de T-SQL)


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