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

Cómo funciona OBJECTPROPERTYEX() en SQL Server

En SQL Server, OBJECTPROPERTYEX() La función devuelve información sobre los objetos del ámbito del esquema en la base de datos actual.

Esta función hace exactamente lo mismo que OBJECTPROPERTY() , excepto que admite más propiedades y el valor de retorno es diferente. El OBJECTPROPERTYEX() la función devuelve una sql_variant tipo, mientras que OBJECTPROPERTY() devuelve un int tipo.

Sintaxis

La función acepta dos argumentos:el ID del objeto y la propiedad que desea devolver.

OBJECTPROPERTYEX ( id , property )

Ejemplo 1:uso básico

Aquí hay un ejemplo para demostrar el uso básico de esta función.

SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| U        |
+----------+

En este caso, hay un objeto con una ID de 885578193 y es una mesa El BaseType de este objeto es U.

Ejemplo 2:nombrar el objeto

En el ejemplo anterior, conocía el ID del objeto. En la mayoría de los casos, probablemente solo conozca el nombre del objeto, pero no su ID. En tales casos, puede usar el OBJECT_ID() función para obtener el ID del objeto, en función de su nombre.

Así:

SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| U        |
+----------+

Ejemplo 3:más propiedades

Aquí hay un ejemplo que devuelve más de las propiedades que no obtendrá con OBJECTPROPERTY() .

USE WideWorldImportersDW;
DECLARE @objectId int = OBJECT_ID(N'Integration.GenerateDateDimensionColumns');
SELECT 
  OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType,
  OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise,
  OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess,
  OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess;

Resultado:

+------------+-------------+--------------------+------------------+
| BaseType   | IsPrecise   | SystemDataAccess   | UserDataAccess   |
|------------+-------------+--------------------+------------------|
| IF         | 0           | 1                  | 1                |
+------------+-------------+--------------------+------------------+

Al momento de escribir, OBJECTPROPERTYEX() La función admite 109 propiedades. Consulte a continuación una lista completa de las propiedades admitidas por esta función.

Ejemplo 4:en una cláusula WHERE

Puedes usar OBJECTPROPERTYEX() en un WHERE cláusula si es necesario.

En este ejemplo, ejecuto dos consultas:una que devuelve tablas que tienen una clave externa y otra que devuelve tablas a las que hace referencia una clave externa.

USE Music;
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') = 1;

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignRef') = 1;

Resultado:

Changed database context to 'Music'.
+----------+---------+
| Schema   | Table   |
|----------+---------|
| dbo      | Artists |
| dbo      | Albums  |
+----------+---------+
(2 rows affected)
+----------+---------+
| Schema   | Table   |
|----------+---------|
| dbo      | Artists |
| dbo      | Genres  |
| dbo      | Country |
+----------+---------+
(3 rows affected)

Lista completa de propiedades

Aquí hay una lista completa de propiedades compatibles con OBJECTPROPERTYEX() función:

  • Tipo base
  • CnstIsClustKey
  • CnstEsColumna
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstNoEsDeConfianza
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HasAfterTrigger
  • HasDeleteTrigger
  • TieneInsertTrigger
  • HasInsteadOfTrigger
  • Tiene activador de actualización
  • AnsiNullsOn
  • IsCheckCnst
  • EsRestricción
  • EsPredeterminado
  • EsCnstPredeterminado
  • EsDeterminista
  • Está cifrado
  • Se ejecuta
  • EsProcExtendido
  • EsClaveExterna
  • Está indexado
  • Es indexable
  • EsFunciónEnLínea
  • EsMSEnviado
  • EsPreciso
  • EsClavePrincipal
  • EsProcedimiento
  • IsQuotedIdentOn
  • Hace cola
  • EsReplProc
  • Es una regla
  • EsFunciónEscalar
  • Está vinculado al esquema
  • EsTablaDeSistema
  • IsSystemVerified
  • EsTabla
  • FunciónEsTabla
  • EsActivador
  • EsCnstÚnico
  • EsTablaUsuario
  • EsVer
  • Id de propietario
  • Id. de esquema
  • Acceso a datos del sistema
  • Desencadenador de eliminación de tabla
  • TableDeleteTriggerCount
  • Estado de combinación de texto completo de la tabla
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • Recuento de elementos de texto completo de la tabla
  • Columna de clave de texto completo de la tabla
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • Extracción semántica de texto completo de tabla
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TablaTieneClaveExterna
  • La tabla tiene una referencia externa
  • TablaTieneIdentidad
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • La tabla tiene clave principal
  • TableHasRowGuidCol
  • TableHasTextImage
  • La tabla tiene marca de tiempo
  • TablaTieneCnstÚnico
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • Desencadenador de inserción de tabla
  • Recuento de activadores de inserción de tabla
  • La tabla es falsa
  • TableIsLockedOnBulkLoad
  • La tabla está optimizada para memoria
  • La tabla está anclada
  • TableTextInRowLimit
  • Desencadenador de actualización de tabla
  • Recuento de activadores de actualización de tabla
  • Acceso a datos de usuario
  • La tabla tiene un conjunto de columnas
  • Cardinalidad
  • Tipo temporal de tabla

Consulte la documentación de Microsoft para obtener una explicación detallada de cada propiedad.

Ver también OBJECTPROPERTY() vs OBJECTPROPERTYEX() para obtener una explicación más detallada de las diferencias entre estas dos funciones.