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

Compruebe si un objeto es una tabla, una vista o un procedimiento almacenado en SQL Server mediante la función OBJECTPROPERTY()

En SQL Server puede usar OBJECTPROPERTY() función para comprobar el tipo de un objeto. Más concretamente, puedes comprobar si es o no de un tipo específico.

Por ejemplo, IsTable le dice si es o no una tabla, el IsView propiedad te dice si es o no una vista, etc.

Este artículo ofrece algunos ejemplos básicos que comprueban si un objeto es una tabla, una vista, un procedimiento almacenado o una función con valores de tabla.

Ejemplo 1:comprobar la tabla

Aquí hay un ejemplo que verifica si un objeto es una tabla.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsTable') AS [IsTable];

Resultado:

+-----------+
| IsTable   |
|-----------|
| 1         |
+-----------+

Aquí, el nombre del objeto es Artists y el esquema es dbo .

En este caso, el resultado es 1 , lo que indica que el objeto es de hecho una tabla.

Ejemplo 2:verificar la vista

Aquí hay un ejemplo que verifica si un objeto es una vista.

USE Music; 
SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.Artists'), 'IsView') AS [IsView];

Resultado:

+----------+
| IsView   |
|----------|
| 0        |
+----------+

En este caso, estoy comprobando el mismo objeto del ejemplo anterior, por lo que ya sabemos que no es una vista. Por lo tanto, el resultado es 0 , lo que indica que no es una vista.

Aquí hay otro ejemplo, esta vez el objeto es de hecho una vista:

SELECT OBJECTPROPERTY(OBJECT_ID(N'dbo.RockAlbums'), 'IsView') AS [IsView];

Resultado:

+----------+
| IsView   |
|----------|
| 1        |
+----------+

Tenga en cuenta que eliminé USE Music; parte, porque ya estoy en esa base de datos. OBJECTPROPERTY() solo comprueba los objetos del ámbito del esquema en la base de datos actual.

Ejemplo 3:declaración condicional

Podemos llevar el concepto un paso más allá e incorporar los ejemplos anteriores en un IF declaración. De esa manera podemos ejecutar una sola declaración para averiguar de qué tipo es el objeto.

A continuación se muestran ejemplos básicos que simplemente generan el tipo de objeto.

Mesa

DECLARE @TheObject varchar(255) = 'dbo.Artists';
IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1
  PRINT 'View';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1
  PRINT 'Table';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1
  PRINT 'Stored Procedure';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1
  PRINT 'Table-valued Function';
ELSE
  PRINT 'Unknown. Maybe add more types to this statement.';

Resultado:

Table

En este caso, el objeto es una mesa.

Aquí hay más ejemplos que usan la misma declaración, pero con diferentes tipos de objetos.

Ver

DECLARE @TheObject varchar(255) = 'dbo.RockAlbums';
IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1
  PRINT 'View';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1
  PRINT 'Table';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1
  PRINT 'Stored Procedure';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1
  PRINT 'Table-valued Function';
ELSE
  PRINT 'Unknown. Maybe add more types to this statement.';

Resultado:

View

Procedimiento almacenado

DECLARE @TheObject varchar(255) = 'dbo.uspGetAlbumsByArtist';
IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1
  PRINT 'View';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1
  PRINT 'Table';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1
  PRINT 'Stored Procedure';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1
  PRINT 'Table-valued Function';
ELSE
  PRINT 'Unknown. Maybe add more types to this statement.';

Resultado:

Stored Procedure

Función con valores de tabla

DECLARE @TheObject varchar(255) = 'dbo.ufn_AlbumsByGenre1';
IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsView') AS [IsView]) = 1
  PRINT 'View';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTable') AS [IsTable]) = 1
  PRINT 'Table';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsProcedure') AS [IsProcedure]) = 1
  PRINT 'Stored Procedure';
ELSE IF (SELECT OBJECTPROPERTY(OBJECT_ID(@TheObject), 'IsTableFunction') AS [IsTableFunction]) = 1
  PRINT 'Table-valued Function';
ELSE
  PRINT 'Unknown. Maybe add more types to this statement.';

Resultado:

Table-valued Function

Puede agregar más tipos a la declaración para que sea más útil. He enumerado los argumentos que OBJECTPROPERTY() acepta en esta página. Sin embargo, no todos son tipos de objetos:hay muchas propiedades diferentes que puede verificar.

Para obtener una explicación completa de cada propiedad, consulte la documentación de Microsoft.