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

SQL Server SHOW TABLES Equivalente


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';