Abaixo estão cinco métodos que você pode usar para determinar rapidamente quantas tabelas definidas pelo usuário estão no banco de dados atual no SQL Server.
Todas as cinco opções usam o
COUNT()
função para obter a contagem. Obviamente, você pode substituir isso por um asterisco (*
), ou os nomes das colunas para retornar uma lista de todas as tabelas definidas pelo usuário. Opção 1 – sys.tables
A maneira mais óbvia de fazer isso é consultar o
sys.tables
visualização do catálogo do sistema. Todo o propósito desta visão é retornar uma linha para cada tabela de usuário, então é exatamente o que precisamos. USE WideWorldImportersDW; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Resultado:
+-------------------------+ | Number of User Tables | |-------------------------| | 29 | +-------------------------+
Neste caso eu retorno o número de tabelas de usuários do
WideWorldImportersDW
base de dados. Se eu mudar para outro banco de dados, recebo um resultado diferente:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.tables;
Resultado:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Como mencionado, você pode listar as tabelas simplesmente substituindo o
COUNT(*)
linha com um asterisco (*
) ou os nomes das colunas:USE Music; SELECT name FROM sys.tables;
Resultado:
+---------+ | name | |---------| | Artists | | Genres | | Albums | | Country | +---------+
Opção 2 – Filtrar sys.objects por tipo
Outra opção é consultar o
sys.objects
visualização do catálogo. USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type = 'U';
Resultado:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Neste caso, você precisa filtrar por
type = 'U'
(U
é para “Tabela de Usuário”). Opção 3 – Filtrar sys.objects por “Descrição do tipo”
Outra maneira de consultar o
sys.objects
view é filtrar os resultados pelo type_desc
coluna. USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE type_desc = 'USER_TABLE';
Resultado:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Opção 4 – Filtrar sys.objects usando a função OBJECTPROPERTY()
Você também pode usar o
OBJECTPROPERTY()
função em seu WHERE
cláusula. Esta função aceita dois argumentos:um ID de objeto e uma propriedade. O ID do objeto pode ser o ID da tabela e a propriedade pode ser
IsUserTable
, que determina se o objeto é ou não uma tabela do sistema. Portanto, você poderia fazer algo assim:
USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsUserTable') = 1;
Resultado:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Opção 5 – INFORMAÇÕES_ESQUEMA.TABELAS
Esta opção consulta o
INFORMATION_SCHEMA.TABLES
visualização do esquema de informações. Esta visualização retorna visualizações e tabelas, então você precisa filtrar por TABLE_TYPE = 'BASE TABLE'
para retornar apenas tabelas. USE Music; SELECT COUNT(*) AS [Number of User Tables] FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';
Resultado:
+-------------------------+ | Number of User Tables | |-------------------------| | 4 | +-------------------------+
Se você precisar descobrir o número de tabelas do sistema, consulte 3 maneiras de contar o número de tabelas do sistema no SQL Server.