sql >> Base de Datos >  >> RDS >> Sqlserver

3 formas de contar el número de tablas del sistema en una base de datos de SQL Server

Aquí hay un artículo que presenta tres formas de determinar rápidamente cuántas tablas del sistema hay en la base de datos actual en SQL Server.

Las tres opciones usan COUNT() función al consultar el sys.objects vista del catálogo del sistema. Todos dan como resultado el mismo resultado, por lo que realmente no necesita pasar de la primera opción. Pero los enumeraré de todos modos.

Opción 1:por tipo

La forma más concisa de hacer esto es filtrar por el type columna.

USE Music;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE type = 'S';

Resultado:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 72                        |
+---------------------------+

Aquí, filtro por un type de S . La S significa "tabla base del sistema".

Si cambio al maestro base de datos, obtengo un resultado diferente:

USE Master;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE type = 'S';

Resultado:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 79                        |
+---------------------------+

Esto se debe a que el maestro La base de datos contiene algunas tablas del sistema que no están en otras bases de datos.

Podemos ejecutar la siguiente consulta para obtener los nombres:

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        |
+--------------------------+

En este caso comparo el maestro base de datos al modelo base de datos. Puede especificar explícitamente una base de datos diferente intercambiando model con el nombre de la otra base de datos.

Opción 2:por "Descripción del tipo"

Otra opción es filtrar por type_desc columna en lugar del type columna.

USE Music;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE type_desc = 'SYSTEM_TABLE';

Resultado:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 72                        |
+---------------------------+

Opción 3:por OBJECTPROPERTY()

Si por alguna razón encuentra que las dos opciones anteriores no son adecuadas, puede intentar usar OBJECTPROPERTY() función.

Esta función acepta dos argumentos:un ID de objeto y una propiedad. El ID del objeto puede ser el ID de la tabla y la propiedad puede ser IsSystemTable , que determina si el objeto es o no una tabla del sistema.

Por lo tanto, podría hacer algo como esto:

USE Music;
SELECT COUNT(*) AS [Number of System Tables]
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, 'IsSystemTable') = 1;

Resultado:

+---------------------------+
| Number of System Tables   |
|---------------------------|
| 72                        |
+---------------------------+

Lista de las tablas

Puede modificar las tres opciones si desea enumerar las tablas en lugar de solo contarlas. Para hacer esto, simplemente reemplace COUNT(*) AS [Number of User Tables] con * . Alternativamente, puede nombrar explícitamente las columnas que desea devolver.

Recuento de tablas definidas por el usuario

Si necesita averiguar el número de usuario tablas, consulte 5 formas de contar el número de tablas definidas por el usuario en SQL Server.