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

Use OBJECTPROPERTY() para averiguar si una tabla es una tabla de sistema en SQL Server

OBJECTPROPERTY() La función en SQL Server le permite verificar un objeto para una propiedad específica.

Puede utilizar esta función para comprobar si un objeto es una tabla del sistema o no. Para hacer esto, pase el ID del objeto como primer argumento y IsSystemTable como segundo argumento. La función devuelve un 1 o un 0 dependiendo de si es o no una tabla del sistema (1 significa que es una tabla del sistema y 0 significa que no lo es).

Ejemplo 1:uso básico

Aquí hay un ejemplo rápido para demostrarlo.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Resultado:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

En este caso, el objeto es una tabla de sistema.

Ejemplo 2:el objeto NO es una tabla del sistema

Esto es lo que sucede cuando el objeto no es una tabla del sistema.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Resultado:

+-----------------+
| IsSystemTable   |
|-----------------|
| 0               |
+-----------------+

En este caso, la base de datos de hecho, tengo un objeto con esa ID, pero el objeto es en realidad una tabla definida por el usuario, por lo que obtengo un resultado negativo.

Aquí está nuevamente usando OBJECT_ID() para obtener el ID del nombre del objeto.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Resultado:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

También verifiqué si el objeto es una tabla definida por el usuario y el resultado es positivo.

Ejemplo 3:el objeto no existe

SQL Server asume que el ID del objeto está en el contexto de la base de datos actual. Si pasa un ID de objeto de una base de datos diferente, obtendrá un resultado NULO o obtendrá resultados incorrectos.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') AS [12345678];

Resultado:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

En este caso, la base de datos no contiene objetos con ese nombre o ID, por lo que obtengo un resultado NULL.

También obtendrá NULL en caso de error o si no tiene permiso para ver el objeto.