|

Como obter a lista de todas as tabelas de um banco de dados SQL Server

Compartilhe :

 

Neste artigo você vai aprender a listar todas as tabelas de um banco de dados SQL Server, incluindo variações úteis: filtrar por schema, contar linhas, ver o tamanho de cada tabela e a forma moderna e recomendada de fazer essa consulta.

Dicas de Microsoft SQL Server
Dicas de Microsoft SQL Server

Passo a passo

  1. Abra o SQL Server Management Studio (SSMS).
  2. No Object Explorer, selecione o banco de dados desejado (ou execute USE NomeDoBanco; no início do script).
  3. Execute a query desejada abaixo em uma nova janela de consulta.

Forma clássica (ainda funciona, mas está obsoleta)

SELECT name
FROM sysobjects
WHERE type = 'u'
ORDER BY name;

Essa query funciona em qualquer versão do SQL Server, mas sysobjects é uma view de compatibilidade herdada do SQL Server 2000. A Microsoft recomenda não usá-la em scripts novos, pois ela pode ser removida em versões futuras e não traz informações adicionais úteis (schema, datas de criação etc.).

Forma recomendada — sys.tables

SELECT name, create_date, modify_date
FROM sys.tables
ORDER BY name;

sys.tables é uma view de catálogo dedicada só a tabelas — mais clara do que filtrar sys.objects por tipo, e já traz metadados extras como data de criação e última modificação.

Incluindo o schema de cada tabela

Em bancos com múltiplos schemas, é importante saber a qual schema cada tabela pertence (evita confundir dbo.Clientes com vendas.Clientes, por exemplo):

SELECT s.name AS schema_name, t.name AS table_name, t.create_date
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
ORDER BY s.name, t.name;

Forma padrão ANSI (portável entre bancos de dados)

Se você precisa de uma consulta que funcione de forma parecida em outros SGBDs (MySQL, PostgreSQL etc.), use INFORMATION_SCHEMA:

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_NAME;

Extra: quantidade de linhas e tamanho de cada tabela

Uma dúvida comum logo depois de listar as tabelas é “quantas linhas cada uma tem” ou “quanto espaço cada uma ocupa”. A consulta abaixo responde as duas coisas de uma vez, usando as views internas de partição e alocação de espaço:

SELECT
    s.name  AS schema_name,
    t.name  AS table_name,
    p.rows  AS total_linhas,
    CAST(ROUND(SUM(a.total_pages) * 8 / 1024.0, 2) AS DECIMAL(18,2)) AS tamanho_mb
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1)
JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY s.name, t.name, p.rows
ORDER BY total_linhas DESC;

Buscando uma tabela específica pelo nome

SELECT s.name AS schema_name, t.name AS table_name
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name LIKE '%Cliente%';

Conclusão

Listar tabelas é uma das tarefas mais básicas do dia a dia com SQL Server, mas vale a pena usar sys.tables (ou INFORMATION_SCHEMA.TABLES, se precisar de portabilidade) em vez da antiga sysobjects. Além de ser a forma recomendada atualmente, essas views de catálogo trazem metadados prontos — schema, datas, e integração fácil com outras views do sistema para obter contagem de linhas e tamanho ocupado.

 

Posts Similares