sql >> Databasteknik >  >> RDS >> Sqlserver

OBJECTPROPERTY() vs OBJECTPROPERTYEX() i SQL Server:Vad är skillnaden?

I SQL Server kan du ha stött på OBJECTPROPERTY() funktion, bara för att ta reda på att det också finns en OBJECTPROPERTYEX() funktion som verkar göra exakt samma sak.

Vad händer här? Varför behövs två funktioner som gör samma sak?

Jag förstår att Microsoft valde att lägga till OBJECTPROPERTYEX() för att utöka funktionaliteten för OBJECTPROPERTY() , snarare än att införa ändringar i OBJECTPROPERTY() som potentiellt skulle bryta befintlig kod på äldre system.

Så det finns några skillnader mellan de två funktionerna.

Vad är annorlunda?

I ett nötskal, OBJECTPROPERTYEX() stöder sex extra egenskaper, och dess returtyp är annorlunda.

Här är en uppdelning.

OBJECTPROPERTY() OBJECTPROPERTYEX()
Returtyp int sql_variant
Antal egenskaper som stöds 103 109
Extra egenskaper
  • BaseType
  • Är Precis
  • SystemDataAccess
  • TableFullTextSemanticExtraction
  • UserDataAccess
  • Kardinalitet
Egenskaper som stöds
  • 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
  • Har AfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • ÄrDefault
  • IsDefaultCnst
  • Är deterministisk
  • Är krypterad
  • Utförs
  • IsExtendedProc
  • IsForeignKey
  • Är indexerad
  • Är indexerbar
  • IsInlineFunction
  • ÄrMSShipped
  • IsPrimaryKey
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • Ägar-ID
  • SchemaId
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TabellFulltextChangeTrackingOn
  • TableFulltextDocs Processed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TabellFulltextKeyColumn
  • TabellFulltextPendingChanges
  • TabellFulltextPopuleraStatus
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHas ForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TabellHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • TableHasColumnSet
  • TableTemporalType
  • BaseType
  • 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
  • Har AfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • ÄrDefault
  • IsDefaultCnst
  • Är deterministisk
  • Är krypterad
  • Utförs
  • IsExtendedProc
  • IsForeignKey
  • Är indexerad
  • Är indexerbar
  • IsInlineFunction
  • ÄrMSShipped
  • IsPrecise
  • IsPrimaryKey
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • Ägar-ID
  • SchemaId
  • SystemDataAccess
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocs Processed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TabellFulltextKeyColumn
  • TabellFulltextPendingChanges
  • TabellFulltextPopuleraStatus
  • TableFullTextSemanticExtraction
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHas ForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TabellHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • UserDataAccess
  • TableHasColumnSet
  • Kardinalitet
  • TableTemporalType

Exempel på de extra egenskaperna

Här är ett exempel som visar dessa extra egenskaper som används.

ANVÄND WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROjectId(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROjectIdex , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,PresentProperty, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess, Presentkort, AS UserDataAccess,  

Resultat (med vertikal utdata):

BaseType | IFIsPrecis | 0SystemDataAccess | 1TabellFullTextSemanticExtraction | 0UserDataAccess | 1Kardinalitet | NULL

I det här fallet är objektet en funktion med tabellvärde, och det returnerar data för fem av de sex egenskaperna.

Låt oss nu istället skicka in namnet på en tabell för att se om vi kan få ett värde för kardinalitet.

ANVÄND WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'ISPreciECTId', 'ISPreciECTId') ASJECTI , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,PresentProperty, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess, Presentkort, AS UserDataAccess,  

Resultat (med vertikal utdata):

BaseType | U är precis | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0UserDataAccess | NULLKardinalitet | 116295

Den här gången får vi NULL för tre av fastigheterna, men vi får ett värde för Cardinality-egenskapen.


  1. UNIK begränsning kontra kontroll före INSERT

  2. OGG-01224 Adressen används redan

  3. Basera databasmodeller i verkligheten:A Blogger's Challenge

  4. Formatera SQLite-resultat som JSON