Aqui está um artigo que apresenta três maneiras de determinar rapidamente quantas tabelas de sistema estão no banco de dados atual no SQL Server.
Todas as três opções usam o
COUNT()
função enquanto consulta o sys.objects
visualização do catálogo do sistema. Todos eles resultam na mesma saída, então você realmente não precisa ir além da primeira opção. Mas vou listá-los de qualquer maneira. Opção 1 - Por Tipo
A maneira mais concisa de fazer isso é filtrar pelo
type
coluna. USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Resultado:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Aqui, eu filtro por um
type
de S
. O S
significa “tabela base do sistema”. Se eu mudar para o mestre banco de dados, recebo um resultado diferente:
USE Master; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type = 'S';
Resultado:
+---------------------------+ | Number of System Tables | |---------------------------| | 79 | +---------------------------+
Isso ocorre porque o mestre database contém algumas tabelas de sistema que não estão em outros bancos de dados.
Podemos executar a seguinte consulta para obter os nomes:
USE master; SELECT name FROM sys.objects WHERE type = 'S' AND name NOT IN ( SELECT name FROM model.sys.objects WHERE type = 'S' );
Resultado:
+--------------------------+ | name | |--------------------------| | sysextendedrecoveryforks | | syslogshippers | | sysmatrixageforget | | sysmatrixages | | sysmatrixbricks | | sysmatrixconfig | | sysmatrixmanagers | +--------------------------+
Neste caso, comparo o mestre banco de dados para o modelo base de dados. Você pode especificar explicitamente um banco de dados diferente trocando
model
com o nome do outro banco de dados. Opção 2 – Por “Descrição do Tipo”
Outra opção é filtrar pelo
type_desc
coluna em vez do type
coluna. USE Music; SELECT COUNT(*) AS [Number of System Tables] FROM sys.objects WHERE type_desc = 'SYSTEM_TABLE';
Resultado:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Opção 3 – Por OBJECTPROPERTY()
Se por algum motivo você achar as duas opções anteriores inadequadas, você pode tentar usar o
OBJECTPROPERTY()
função. 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
IsSystemTable
, 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 System Tables] FROM sys.objects WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;
Resultado:
+---------------------------+ | Number of System Tables | |---------------------------| | 72 | +---------------------------+
Liste as tabelas
Você pode modificar as três opções se quiser listar as tabelas em vez de apenas contá-las. Para fazer isso, basta substituir o
COUNT(*) AS [Number of User Tables]
com *
. Como alternativa, você pode nomear explicitamente as colunas que deseja retornar. Contar tabelas definidas pelo usuário
Se você precisar descobrir o número de usuário tabelas, consulte 5 maneiras de contar o número de tabelas definidas pelo usuário no SQL Server.