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)