Para auditar uma base de dados MSSQL e suas tabelas, é comum querer a lista de tabelas sob a forma de uma tabela ou uma folha de Excel. Esta consulta SQL permite listar todas as tabelas numa base de dados SQL Server e exibir o número de linhas e tamanho para cada tabela. Desenvolvedores de SQL Server também procuram frequentemente por tabelas, por exemplo, para análise de impacto. Portanto, é muito útil listar rapidamente todas as tabelas para uma auditoria, seja ela técnica ou funcional. Para começar, estas três diferentes consultas T-SQL permitem-lhe exibir a informação de diferentes maneiras, e com diferentes níveis de detalhes.
- A primeira é uma lista simples de tabelas.
- A segunda consulta exibe informações úteis como a coluna object_id, create_date e modify_date.
- A terceira consulta exibe o esquema, o número de linhas e o espaço em disco utilizado por cada tabela.
De fato, as tabelas de sistema e vistas de sistema do SQL Server contêm metadados úteis que descrevem os diferentes objetos na base de dados, incluindo as tabelas, claro. Assim, todas as soluções apresentadas neste artigo usam tabelas ou vistas de sistema, tais como:
- information_schema.tables
- sys.tables
- sys.indexes
- sys.partitions
- sys.allocation_units
- ou sys.schemas
1. Exibir uma lista de todas as tabelas usando uma vista de sistema do SQL Server
No SQL Server, information_schema.tables é uma vista, não uma tabela. É uma das vistas INFORMATION_SCHEMA padronizadas pela ISO para sistemas de gestão de bases de dados relacionais (RDBMS). Esta vista fornece informações sobre as tabelas e vistas presentes numa base de dados. Pode consultá-la para obter metadados sobre estas tabelas e vistas, como os seus nomes, tipos (tabela ou vista) e outros detalhes. Por exemplo, pode usar a vista de sistema information_schema.tables, assim:
SELECT * FROM information_schema.tables WHERE table_type='BASE TABLE';
2. Consulta para obter a lista de tabelas do SQL Server usando a vista sys.tables
Também pode usar a vista de sistema sys.tables. O resultado da consulta mostra que o tipo de tabela armazenado na coluna [type_desc] é USER_TABLE. Sys.tables em Transact-SQL é também uma vista de sistema e não uma tabela. Faz parte do catálogo de sistema do SQL Server e fornece informações sobre todas as tabelas de usuário e tabelas de sistema existentes na base de dados atual. Pode ser usada para recuperar vários detalhes e metadados sobre tabelas, como o seu nome, data de criação, data de modificação e assim por diante. Embora possa ser consultada como uma tabela, não deve ser tratada como uma tabela de usuário editável. Em vez disso, é uma vista estruturada que apresenta certos metadados de sistema sobre as tabelas.
SELECT * FROM sys.tables;
3. Exibir a lista de nomes de tabelas e tamanhos em T-SQL
A terceira é usar múltiplas tabelas de sistema do SQL Server como sys.tables, sys.indexes, sys.partitions, sys.allocation_units e sys.schemas. Estas tabelas são úteis para exibir a lista de tabelas. Também são usadas para exibir o número de linhas em cada tabela e o espaço em disco utilizado. Por exemplo, esta consulta exibe todas as tabelas com o seu número de linhas ordenadas em ordem decrescente. Esta consulta é útil para encontrar o tamanho das maiores tabelas numa base de dados SQL Server.
SELECT sch.name AS SCHEMANAME, tab.name AS TABLENAME, par.rows AS ROWCOUNTS, SUM(alc.total_pages) * 8 AS TOTAL_SPACE, SUM(alc.used_pages) * 8 AS USED_SPACE, (SUM(alc.total_pages) - SUM(alc.used_pages)) * 8 AS UNUSED_SPACE FROM sys.tables tabSELECT sch.name AS SCHEMANAME, tab.name AS TABLENAME, par.rows AS ROWCOUNTS, SUM(alc.total_pages) * 8 AS TOTAL_SPACE, SUM(alc.used_pages) * 8 AS USED_SPACE, (SUM(alc.total_pages) - SUM(alc.used_pages)) * 8 AS UNUSED_SPACE FROM sys.tables tab INNER JOIN sys.indexes ind ON tab.object_id = ind.object_id INNER JOIN sys.partitions par ON ind.object_id = par.object_id AND ind.index_id = par.index_id INNER JOIN sys.allocation_units alc ON par.partition_id = alc.container_id LEFT OUTER JOIN sys.schemas sch ON tab.schema_id = sch.schema_id GROUP BY tab.name, sch.name, par.rows ORDER BY par.rows DESC;
Esta lista de pontos explica a consulta acima e como é construída.
- A palavra-chave “ORDER BY par.rows DESC;” é usada para ordenar a lista de tabelas do SQL Server pelo seu número de linhas, em ordem decrescente.
- Para ordenar por esquema e depois por nome de tabela, use “ORDER BY 1,2” ou “ORDER BY sch.name, tab.name; ” em vez disso.
- O tamanho das tabelas é indicado em KiloBytes ou KB.
Sobre a listagem de objetos do SQL Server e tabelas de sistema
Este tutorial técnico do MS SQL Server explica como criar e usar uma consulta para listar todas as tabelas numa base de dados dada. Se ainda é novo no SQL Server e quer criar uma tabela, aqui está como criar uma tabela SQL Server e inserir algumas linhas de dados. É possível exibir outra lista de tabelas MS SQL com mais foco no espaço em disco disponível.
Seja o primeiro a comentar