I SQL Server, OBJECTPROPERTYEX()
funktionen returnerar information om schemaomfattade objekt i den aktuella databasen.
Den här funktionen gör exakt samma sak som OBJECTPROPERTY()
, förutom att den stöder fler egenskaper och returvärdet är annorlunda. OBJECTPROPERTYEX()
funktion returnerar en sql_variant typ, medan OBJECTPROPERTY()
returnerar en int typ.
Syntax
Funktionen accepterar två argument:objektets ID och egenskapen du vill returnera.
OBJECTPROPERTYEX ( id , property )
Exempel 1 – Grundläggande användning
Här är ett exempel för att visa den grundläggande användningen av denna funktion.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Resultat:
+----------+ | Result | |----------| | U | +----------+
I det här fallet finns det ett objekt med ID:t 885578193
och det är ett bord. BaseType för detta objekt är U.
Exempel 2 – Namnge objektet
I föregående exempel kände jag till objektets ID. I de flesta fall känner du förmodligen bara till objektets namn, men inte dess ID. I sådana fall kan du använda OBJECT_ID()
funktion för att få objektets ID, baserat på dess namn.
Så här:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Resultat:
+----------+ | Result | |----------| | U | +----------+
Exempel 3 – Fler egenskaper
Här är ett exempel som returnerar fler av egenskaperna som du inte kommer att få tillbaka med 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;
Resultat:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
I skrivande stund är OBJECTPROPERTYEX()
Funktionen stöder 109 egenskaper. Se nedan för en fullständig lista över egenskaper som stöds av denna funktion.
Exempel 4 – I en WHERE-klausul
Du kan använda OBJECTPROPERTYEX()
i en WHERE
klausul om så krävs.
I det här exemplet kör jag två frågor:en som returnerar tabeller som har en främmande nyckel och en som returnerar tabeller som refereras av en främmande nyckel.
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;
Resultat:
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)
Fullständig lista över egenskaper
Här är en fullständig lista över egenskaper som stöds av OBJECTPROPERTYEX()
funktion:
- 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
- Skickas MS
- Är Precis
- 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
Se Microsofts dokumentation för en detaljerad förklaring av varje egenskap.
Se även OBJECTPROPERTY()
kontra OBJECTPROPERTYEX()
för en mer detaljerad förklaring av skillnaderna mellan dessa två funktioner.