In SQL Server, de OBJECTPROPERTYEX()
functie retourneert informatie over objecten met een schema in de huidige database.
Deze functie doet precies hetzelfde als OBJECTPROPERTY()
, behalve dat het meer eigenschappen ondersteunt en de geretourneerde waarde anders is. De OBJECTPROPERTYEX()
functie retourneert een sql_variant type, terwijl OBJECTPROPERTY()
retourneert een int typ.
Syntaxis
De functie accepteert twee argumenten:de ID van het object en de eigenschap die u wilt retourneren.
OBJECTPROPERTYEX ( id , property )
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om het basisgebruik van deze functie te demonstreren.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Resultaat:
+----------+ | Result | |----------| | U | +----------+
In dit geval is er een object met een ID van 885578193
en het is een tafel. Het BaseType van dit object is U.
Voorbeeld 2 – Het object een naam geven
In het vorige voorbeeld kende ik de ID van het object. In de meeste gevallen weet u waarschijnlijk alleen de naam van het object, maar niet de ID. In dergelijke gevallen kunt u de OBJECT_ID()
. gebruiken functie om de ID van het object te krijgen, gebaseerd op de naam.
Zoals dit:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Resultaat:
+----------+ | Result | |----------| | U | +----------+
Voorbeeld 3 – Meer eigenschappen
Hier is een voorbeeld dat meer van de eigenschappen retourneert die u niet terugkrijgt met 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;
Resultaat:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
Op het moment van schrijven is de OBJECTPROPERTYEX()
functie ondersteunt 109 eigenschappen. Zie hieronder voor een volledige lijst van eigenschappen die door deze functie worden ondersteund.
Voorbeeld 4 – In een WHERE-clausule
U kunt OBJECTPROPERTYEX()
. gebruiken in een WHERE
clausule indien nodig.
In dit voorbeeld voer ik twee query's uit:een die tabellen retourneert met een externe sleutel en een die tabellen retourneert waarnaar wordt verwezen door een externe sleutel.
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;
Resultaat:
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)
Volledige lijst van eigendommen
Hier is een volledige lijst met eigenschappen die worden ondersteund door de OBJECTPROPERTYEX()
functie:
- Basistype
- 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
- IsAnsiNullsOn
- IsCheckCnst
- IsConstraint
- IsDefault
- IsDefaultCnst
- IsDeterministisch
- IsEncrypted
- IsUitgevoerd
- IsExtendedProc
- IsForeignKey
- IsIndexed
- IsIndexable
- IsInlineFunction
- IsMSShipped
- IsPrecise
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- IsTable
- IsTableFunction
- IsTrigger
- IsUniqueCnst
- IsUserTable
- IsView
- OwnerId
- SchemaId
- SystemDataAccess
- 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
- Gebruikersgegevenstoegang
- TableHasColumnSet
- Kardinaliteit
- TableTemporalType
Zie de Microsoft-documentatie voor een gedetailleerde uitleg van elke eigenschap.
Zie ook OBJECTPROPERTY()
vs OBJECTPROPERTYEX()
voor een meer gedetailleerde uitleg van de verschillen tussen deze twee functies.