Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de contar o número de tabelas do sistema em um banco de dados SQL Server


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.