De vez em quando me pego digitando
SHOW TABLES
no SQL Server, esperando obter uma lista de tabelas. Isso faria todo o sentido se eu estivesse usando MySQL ou MariaDB. Mas o SQL Server/T-SQL não tem um
SHOW TABLES
como MySQL ou MariaDB, então nunca funciona. E continuo esquecendo. Mas, felizmente, o SQL Server tem alternativas. Aqui estão cinco opções para obter uma lista de tabelas no SQL Server. Eles podem ser usados sempre que você estiver tentando encontrar aquele elusivo
SHOW TABLES
instrução no SQL Server. Opção 1 – sys.tables
O
sys.tables
a visualização do catálogo do sistema foi projetada especificamente para retornar informações da tabela do usuário:SELECT name
FROM sys.tables;
Isso retorna o nome de todas as tabelas de usuário no banco de dados atual. Você pode alternar para o banco de dados correto anexando a instrução com
USE <database name>
onde <database name>
é o nome do banco de dados cujas tabelas você deseja listar. Por exemplo, a instrução a seguir retorna todas as tabelas de usuário do
KrankyKranes
base de dados:USE KrankyKranes;
SELECT name
FROM sys.tables;
Você também pode retornar o esquema se quiser:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Aqui, usei o
SCHEMA_NAME()
função para traduzir o valor do schema_id
coluna no nome real do esquema. Opção 2 – sys.objects
Você também pode usar o
sys.objects
visualização do catálogo do sistema. Se você escolher esta opção, poderá filtrá-la por tipo para que apenas as tabelas de usuário sejam retornadas:SELECT name
FROM sys.objects
WHERE type = 'U';
Isso retorna as tabelas de usuário do banco de dados atual. Esta visualização também contém um
schema_id
coluna, então você pode usar o SCHEMA_NAME()
função para traduzir isso no nome do esquema, se necessário. Opção 3 – information_schema.tables
As
INFORMATION_SCHEMA.TABLES
view retorna uma linha para cada tabela ou exibição no banco de dados atual para a qual o usuário atual tem permissões. Podemos filtrar essa visualização por tipo para que apenas as tabelas base sejam retornadas:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
O
TABLE_SCHEMA
coluna contém o nome do esquema da tabela e, portanto, não precisamos usar o SCHEMA_NAME()
função para converter o ID do esquema em seu nome. Opção 4 – sp_tables
As
sp_tables
procedimento armazenado retorna uma lista de objetos que podem ser consultados no ambiente atual. Isso significa qualquer tabela ou exibição, exceto objetos sinônimos. A maneira mais rápida e fácil de chamar esse procedimento é assim:
sp_tables;
Mas isso pode retornar uma longa lista de objetos.
Geralmente é melhor ser mais específico. Por exemplo:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Aqui, estou dizendo ao procedimento para mostrar tabelas de usuários no
KrankyKranes
banco de dados de propriedade de dbo
. O
@table_type
argumento aceita uma lista de valores separados por vírgulas. Então, se quiséssemos incluir visualizações, poderíamos fazer o seguinte:EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Opção 5 – dbo.sysobjects
Antes do SQL Server 2005, o
dbo.sysobjects
view era a visão para mostrar tabelas e outros objetos. Portanto, se você estiver usando uma edição antiga do SQL Server, poderá fazer isso:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';