OBJECTPROPERTY (Transact-SQL)

Actualizado: 12 de diciembre de 2006

Devuelve información acerca de los objetos de ámbito de esquema de la base de datos actual. Para obtener una lista de los objetos de ámbito de esquema, vea sys.objects (Transact-SQL). Esta función no se puede utilizar para objetos que no pertenezcan al ámbito de esquema, como notificaciones de eventos y desencadenadores DDL (lenguaje de definición de datos).

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

OBJECTPROPERTY ( id , property ) 

Argumentos

  • id
    Es una expresión que representa el Id. del objeto de la base de datos actual. id es de tipo int y se supone que es un objeto del ámbito de esquema del contexto de la base de datos actual.
  • property
    Es una expresión que representa la información que se devuelve para el objeto especificado en id. property puede tener uno de los valores siguientes.

    [!NOTA] A menos que se especifique lo contrario, se devuelve NULL si property no es un nombre de propiedad válido, id no es un Id. de objeto válido, id es un tipo de objeto incompatible con el valor especificado en property o el autor de la llamada no tiene permiso para ver los metadatos del objeto.

    Nombre de la propiedad

Tipos de valor devueltos

int

Excepciones

Devuelve NULL si se produce un error o si el autor de la llamada no tiene permiso para ver el objeto.

En SQL Server 2005, un usuario sólo puede ver los metadatos de asegurables que posea o para los que se le haya concedido permiso. Esto significa que las funciones integradas de emisión de metadatos, como OBJECTPROPERTY, pueden devolver NULL si el usuario no tiene ningún permiso para el objeto. Para obtener más información, vea Configuración de visibilidad de los metadatos y Solucionar problemas de visibilidad de los metadatos.

Notas

Database Engine (Motor de base de datos) presupone que object_id se encuentra en el contexto de la base de datos actual. Una consulta que hace referencia a un parámetro object_id de otra base de datos devuelve NULL o resultados incorrectos. Por ejemplo, en la consulta siguiente, el contexto de la base de datos actual es la base de datos master. Database Engine (Motor de base de datos) intentará devolver el valor de propiedad correspondiente al object_id especificado en esa base de datos, en lugar de la base de datos especificada en la consulta. La consulta devuelve resultados incorrectos porque la vista vEmployee no se encuentra en la base de datos master.

USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView');
GO

OBJECTPROPERTY(view_id, 'IsIndexable') puede consumir importantes recursos del equipo porque la evaluación de la propiedad IsIndexable requiere el análisis de la definición de la vista, la normalización y la optimización parcial. Aunque la propiedad IsIndexable identifica tablas o vistas que se pueden indizar, todavía pueden producirse errores en la creación del índice propiamente dicha si no se cumplen algunos requisitos clave de los índices. Para obtener más información, vea CREATE INDEX (Transact-SQL).

OBJECTPROPERTY(table_id, 'TableHasActiveFulltextIndex') devolverá el valor 1 (verdadero) si se agrega al menos una columna de una tabla para su indización. El índice de texto se activa para su llenado en el momento en que se agrega la primera columna para la indización.

Cuando se crea una tabla, la opción QUOTED IDENTIFIER siempre se almacena como ON en los metadatos de la tabla, aunque se haya establecido en OFF al crear la tabla. Por tanto, OBJECTPROPERTY(table_id, 'IsQuotedIdentOn') siempre devolverá el valor 1 (verdadero).

Ejemplos

A. Comprobar si un objeto es una tabla

En el ejemplo siguiente se comprueba si UnitMeasure es una tabla de la base de datos AdventureWorks.

USE AdventureWorks;
GO
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1
   PRINT 'UnitMeasure is a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0
   PRINT 'UnitMeasure is not a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL
   PRINT 'ERROR: UnitMeasure is not a valid object.';
GO

B. Comprobar si una función con valores escalares definida por el usuario es determinista

En el ejemplo siguiente se comprueba si es determinista la función con valores escalares definida por el usuario, ufnGetProductDealerPrice, que devuelve un valor money.

USE AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO

El conjunto de resultados muestra que ufnGetProductDealerPrice no es una función determinista.

-----
0

C. Buscar los objetos que pertenecen a un esquema específico

En el siguiente ejemplo se utiliza la propiedad SchemaId para devolver todos los objetos que pertenecen al esquema Production.

USE AdventureWorks;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'Production')
ORDER BY type_desc, name;
GO

Vea también

Referencia

COLUMNPROPERTY (Transact-SQL)
Funciones de metadatos (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)
sys.objects (Transact-SQL)

Otros recursos

Separación de esquemas de usuario

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido nuevo:
  • Se ha agregado la propiedad TableHasVarDecimalStorageFormat, disponible en el Service Pack 2.

17 de julio de 2006

Contenido nuevo:
  • Se ha agregado la sección Excepciones.

5 de diciembre de 2005

Contenido modificado:
  • Se ha corregido la definición de las propiedades IsTableFunction e IsScalarFunction.
  • Se ha modificado el ejemplo C.