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