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

Retornar uma lista de tabelas e exibições no SQL Server usando T-SQL (sp_tables)


No SQL Server, você pode usar o sp_tables procedimento armazenado do sistema para obter uma lista de tabelas e exibições no ambiente atual.

Você pode retornar todas as tabelas e exibições ou reduzi-las a um proprietário, tipo, padrão específico ou até mesmo uma tabela ou exibição específica.


Sintaxe


A sintaxe fica assim:
sp_tables [ [ @table_name = ] 'name' ]   
     [ , [ @table_owner = ] 'owner' ]   
     [ , [ @table_qualifier = ] 'qualifier' ]   
     [ , [ @table_type = ] "type" ]   
     [ , [@fUsePattern = ] 'fUsePattern'];

Todos os argumentos são opcionais.

Exemplo 1 – Sem argumentos


Você pode executar este procedimento armazenado sem argumentos. Fazer isso retornará todas as tabelas e visualizações no ambiente atual.

Assim:
EXEC sp_tables;

Isso retorna mais de 500 linhas no meu sistema, então não fornecerei os resultados aqui. Além de retornar tabelas e exibições definidas pelo usuário, ele também retorna objetos do sistema, como o sys e INFORMATION_SCHEMA tabelas e vistas.

Exemplo 2 – Todos os argumentos


No outro extremo, aqui está um exemplo que inclui todos os argumentos. Isso restringe os resultados a um nome de tabela específico, um tipo específico, um qualificador específico e um proprietário específico.
EXEC sp_tables
  @table_name = 'Customers',
  @table_owner = 'Sales',
  @table_qualifier = 'WideWorldImporters',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Resultado:
+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

Exemplo 3 – Retornar uma tabela específica


Uma maneira mais fácil de retornar uma tabela específica é simplesmente usar o primeiro argumento.

Assim:
EXEC sp_tables @table_name = 'Customers';

Ou ainda mais concisa, como um destes:
EXEC sp_tables 'Customers';
sp_tables 'Customers';

Embora, esteja ciente de que você pode obter mais de uma linha. Neste exemplo, duas linhas são retornadas:
+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
| WideWorldImporters | Website       | Customers    | VIEW         | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

A primeira linha é para uma tabela e a segunda linha é para uma visualização.

Se eu não estivesse interessado em ver nenhuma exibição ou tabela de sistema, poderia adicionar mais um argumento para especificar o tipo de tabela.

Exemplo 4 – Retornar um tipo de tabela específico


Aqui, refino o exemplo anterior, especificando apenas o tipo de tabela em que estou interessado, juntamente com o nome da tabela.
EXEC sp_tables 
  @table_name = 'Customers',
  @table_type = "'TABLE'";

Resultado:
+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

Os tipos aceitáveis ​​incluem VIEW , TABLE e SYSTEMTABLE .

Observe que os tipos de tabela devem ser maiúsculos.

Exemplo 5 – Retornar vários tipos de tabela


Você deve ter notado que a sintaxe para o tipo de tabela usa aspas simples e aspas duplas. Isso ocorre porque ele aceita uma lista separada por vírgulas de tipos de tabela. A lista inteira está entre aspas duplas e cada item da lista está entre aspas simples, com uma vírgula separando cada item.

Aqui está um exemplo de retorno de tipos de tabela TABLE e VIEW .
EXEC sp_tables 
  @table_type = "'TABLE','VIEW'";

Observe que se SET QUOTED_IDENTIFIER está ON , cada aspa simples deve ser duplicada e todo o parâmetro deve ser colocado entre aspas simples.

Exemplo 6 – Uma observação sobre o argumento do qualificador de tabela


Se você usar o @table_qualifier argumento, seu valor deve ser o mesmo que o ambiente atual, caso contrário, você receberá um erro. No SQL Server, o qualificador de tabela representa o nome do banco de dados. Em alguns produtos, representa o nome do servidor do ambiente de banco de dados da tabela.

Aqui está o que acontece no SQL Server se eu usar um valor diferente do banco de dados atual:
USE Music;
EXEC sp_tables 
  @table_qualifier = 'WideWorldImporters';

Resultado:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86
The database name component of the object qualifier must be the name of the current database.

Exemplo 7 – Curingas


Você pode usar o @fUsePattern argumento para especificar se o sublinhado ( _ ), porcentagem ( % ) e colchetes ( [ ou ] ) são interpretados como caracteres curinga. Os valores válidos são 0 (a correspondência de padrões está desativada) e 1 (a correspondência de padrões está ativada). O valor padrão é 1 .

Aqui está um exemplo de uso de correspondência de padrões para retornar nomes de tabelas que começam com a letra “A”:
EXEC sp_tables
  @table_name = 'A%',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Resultado:
+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| Music             | dbo           | Albums       | TABLE        | NULL      |
| Music             | dbo           | Artists      | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Mas aqui está o que acontece se eu desabilitar a correspondência de padrões:
EXEC sp_tables
  @table_name = 'A%',
  @table_type = "'TABLE'",
  @fUsePattern = 0;

Resultado:
(0 rows affected)