Como listar todas as tabelas no SQL Server?

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.

  1. A primeira é uma lista simples de tabelas.
  2. A segunda consulta exibe informações úteis como a coluna object_id, create_date e modify_date.
  3. 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';
Consulta para obter a lista de todas as tabelas no SQL Server
Consulta para obter a lista de todas as tabelas no SQL Server

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.

https://expert-only.com/en/t-sql/sql-server-table-size-disk-space/

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*