Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

OBJECTPROPERTY() vs OBJECTPROPERTYEX() dans SQL Server :Quelle est la différence ?

Dans SQL Server, vous avez peut-être rencontré le OBJECTPROPERTY() fonction, seulement pour découvrir qu'il y a aussi un OBJECTPROPERTYEX() fonction qui semble faire exactement la même chose.

Que se passe t-il ici? Pourquoi avoir besoin de deux fonctions qui font la même chose ?

Je crois comprendre que Microsoft a choisi d'ajouter OBJECTPROPERTYEX() pour étendre les fonctionnalités de OBJECTPROPERTY() , plutôt que d'introduire des modifications dans OBJECTPROPERTY() qui casserait potentiellement le code existant sur les anciens systèmes.

Il y en a donc quelques différences entre les deux fonctions.

Qu'est-ce qui est différent ?

En un mot, OBJECTPROPERTYEX() prend en charge six propriétés supplémentaires et son type de retour est différent.

Voici une ventilation.

OBJECTPROPERTY() OBJECTPROPERTYEX()
Type de retour entier sql_variant
Nombre de propriétés prises en charge 103 109
Propriétés supplémentaires
  • Type de base
  • Est précis
  • Accès aux données système
  • TableFullTextSemanticExtraction
  • Accès aux données utilisateur
  • Cardinalité
Propriétés prises en charge
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HasAfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • EstAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • EstParDéfaut
  • IsDefaultCnst
  • Est déterministe
  • IsEncrypted
  • Est exécuté
  • IsExtendedProc
  • IsForeignKey
  • Est indexé
  • Est indexable
  • IsInlineFunction
  • IsMSShipped
  • IsPrimaryKey
  • EstProcédure
  • IsQuotedIdentOn
  • EstQueue
  • IsReplProc
  • EstRègle
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • EstTable
  • EstTableFonction
  • EstTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • Identifiant du propriétaire
  • ID de schéma
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFulltextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHasForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • TableHasColumnSet
  • TableTemporalType
  • Type de base
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HasAfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • EstAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • EstParDéfaut
  • IsDefaultCnst
  • Est déterministe
  • IsEncrypted
  • Est exécuté
  • IsExtendedProc
  • IsForeignKey
  • Est indexé
  • Est indexable
  • IsInlineFunction
  • IsMSShipped
  • Est précis
  • IsPrimaryKey
  • EstProcédure
  • IsQuotedIdentOn
  • EstQueue
  • IsReplProc
  • EstRègle
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • EstTable
  • EstTableFonction
  • EstTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • Identifiant du propriétaire
  • ID de schéma
  • Accès aux données système
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableFullTextSemanticExtraction
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHasForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • Accès aux données utilisateur
  • TableHasColumnSet
  • Cardinalité
  • TableTemporalType

Exemple de propriétés supplémentaires

Voici un exemple qui montre ces propriétés supplémentaires en cours d'utilisation.

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, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction,
  OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,
  OBJECTPROPERTYEX(@objectId, 'Cardinality') AS Cardinality;

Résultat (en utilisant la sortie verticale) :

BaseType                        | IF
IsPrecise                       | 0
SystemDataAccess                | 1
TableFullTextSemanticExtraction | 0
UserDataAccess                  | 1
Cardinality                     | NULL

Dans ce cas, l'objet est une fonction table et renvoie des données pour cinq des six propriétés.

Maintenant, passons plutôt le nom d'une table pour voir si nous pouvons obtenir une valeur pour la cardinalité.

USE WideWorldImportersDW;
DECLARE @objectId int = OBJECT_ID(N'Dimension.City');
SELECT 
  OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType,
  OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise,
  OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess,
  OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction,
  OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,
  OBJECTPROPERTYEX(@objectId, 'Cardinality') AS Cardinality;

Résultat (en utilisant la sortie verticale) :

BaseType                        | U 
IsPrecise                       | NULL
SystemDataAccess                | NULL
TableFullTextSemanticExtraction | 0
UserDataAccess                  | NULL
Cardinality                     | 116295

Cette fois, nous obtenons NULL pour trois des propriétés, mais nous obtenons une valeur pour la propriété Cardinalité.