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.