Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

OBJECTPROPERTY() vs. OBJECTPROPERTYEX() in SQL Server:Was ist der Unterschied?

In SQL Server sind Sie vielleicht auf OBJECTPROPERTY() gestoßen Funktion, nur um herauszufinden, dass es auch ein OBJECTPROPERTYEX() gibt Funktion, die genau dasselbe zu tun scheint.

Was ist denn hier los? Warum die Notwendigkeit zweier Funktionen, die dasselbe tun?

Soweit ich weiß, hat Microsoft beschlossen, OBJECTPROPERTYEX() hinzuzufügen um die Funktionalität von OBJECTPROPERTY() zu erweitern , anstatt Änderungen an OBJECTPROPERTY() einzuführen das würde möglicherweise vorhandenen Code auf Legacy-Systemen beschädigen.

Es gibt also einige Unterschiede zwischen den beiden Funktionen.

Was ist anders?

Kurz gesagt, OBJECTPROPERTYEX() unterstützt sechs zusätzliche Eigenschaften, und sein Rückgabetyp ist anders.

Hier ist eine Aufschlüsselung.

OBJEKTEIGENSCHAFT() OBJECTPROPERTYEX()
Rückgabetyp int sql_variant
Anzahl der unterstützten Eigenschaften 103 109
Zusätzliche Eigenschaften
  • Basistyp
  • IstPräzise
  • Systemdatenzugriff
  • TableFullTextSemanticExtraction
  • Benutzerdatenzugriff
  • Kardinalität
Unterstützte Eigenschaften
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsStattTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HatAfterTrigger
  • HatDeleteTrigger
  • HatInsertTrigger
  • HatStattTrigger
  • HatUpdateTrigger
  • IstAnsiNullsOn
  • IsCheckCnst
  • IstEinschränkung
  • IstStandard
  • IstDefaultCnst
  • Ist deterministisch
  • Istverschlüsselt
  • Wird ausgeführt
  • IsExtendedProc
  • IstFremdschlüssel
  • Ist indiziert
  • IstIndexierbar
  • IstInlineFunktion
  • WirdMSVersendet
  • IstPrimaryKey
  • IstProzedur
  • IsQuotedIdentOn
  • IstWarteschlange
  • IstReplProc
  • IstRegel
  • IsScalarFunction
  • IsSchemaBound
  • IstSystemTabelle
  • IstSystemverifiziert
  • IstTabelle
  • IstTableFunction
  • IstTrigger
  • IsUniqueCnst
  • IstBenutzertabelle
  • IsView
  • Eigentümer-ID
  • SchemaId
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFulltextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • Tabelle hatFremdschlüssel
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • TableHasColumnSet
  • TableTemporalType
  • Basistyp
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsStattTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HatAfterTrigger
  • HatDeleteTrigger
  • HatInsertTrigger
  • HatStattTrigger
  • HatUpdateTrigger
  • IstAnsiNullsOn
  • IsCheckCnst
  • IstEinschränkung
  • IstStandard
  • IstDefaultCnst
  • Ist deterministisch
  • Istverschlüsselt
  • Wird ausgeführt
  • IsExtendedProc
  • IstFremdschlüssel
  • Ist indiziert
  • IstIndexierbar
  • IstInlineFunktion
  • WirdMSVersendet
  • IstPräzise
  • IstPrimaryKey
  • IstProzedur
  • IsQuotedIdentOn
  • IstWarteschlange
  • IstReplProc
  • IstRegel
  • IsScalarFunction
  • IsSchemaBound
  • IstSystemTabelle
  • IstSystemverifiziert
  • IstTabelle
  • IstTableFunction
  • IstTrigger
  • IsUniqueCnst
  • IstBenutzertabelle
  • IsView
  • Eigentümer-ID
  • SchemaId
  • Systemdatenzugriff
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableFullTextSemanticExtraction
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • Tabelle hatFremdschlüssel
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • Benutzerdatenzugriff
  • TableHasColumnSet
  • Kardinalität
  • TableTemporalType

Beispiel für die zusätzlichen Eigenschaften

Hier ist ein Beispiel, das diese zusätzlichen Eigenschaften in Verwendung zeigt.

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;

Ergebnis (bei vertikaler Ausgabe):

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

In diesem Fall ist das Objekt eine Tabellenwertfunktion und gibt Daten für fünf der sechs Eigenschaften zurück.

Lassen Sie uns jetzt stattdessen den Namen einer Tabelle übergeben, um zu sehen, ob wir einen Wert für die Kardinalität erhalten können.

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;

Ergebnis (bei vertikaler Ausgabe):

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

Dieses Mal erhalten wir NULL für drei der Eigenschaften, aber wir erhalten einen Wert für die Kardinalitätseigenschaft.