I SQL Server er OBJECTPROPERTYEX()
funktion returnerer information om skema-omfattede objekter i den aktuelle database.
Denne funktion gør nøjagtig det samme som OBJECTPROPERTY()
, bortset fra at den understøtter flere egenskaber, og returværdien er anderledes. OBJECTPROPERTYEX()
funktion returnerer en sql_variant type, hvorimod OBJECTPROPERTY()
returnerer en int type.
Syntaks
Funktionen accepterer to argumenter:objektets ID og den egenskab, du ønsker returneret.
OBJECTPROPERTYEX ( id , property )
Eksempel 1 – Grundlæggende brug
Her er et eksempel for at demonstrere den grundlæggende brug af denne funktion.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Resultat:
+----------+ | Result | |----------| | U | +----------+
I dette tilfælde er der et objekt med et ID på 885578193
og det er et bord. BaseType af dette objekt er U.
Eksempel 2 – Navngivning af objektet
I det forrige eksempel kendte jeg objektets ID. I de fleste tilfælde kender du sandsynligvis kun objektets navn, men ikke dets ID. I sådanne tilfælde kan du bruge OBJECT_ID()
funktion for at få objektets ID, baseret på dets navn.
Sådan:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Resultat:
+----------+ | Result | |----------| | U | +----------+
Eksempel 3 – Flere egenskaber
Her er et eksempel, der returnerer flere af de egenskaber, som du ikke får returneret 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 skrivende stund er OBJECTPROPERTYEX()
funktion understøtter 109 egenskaber. Se nedenfor for en komplet liste over egenskaber, der understøttes af denne funktion.
Eksempel 4 – I en WHERE-klausul
Du kan bruge OBJECTPROPERTYEX()
i en WHERE
klausul om nødvendigt.
I dette eksempel kører jeg to forespørgsler:en, der returnerer tabeller, der har en fremmednøgle, og en, der returnerer tabeller, der refereres til af en fremmednøgle.
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)
Fuld liste over egenskaber
Her er en komplet liste over egenskaber, der understøttes af 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
- HarAfterTrigger
- HasDeleteTrigger
- HasInsertTrigger
- HasInsteadOfTrigger
- HasUpdateTrigger
- IsAnsiNullsOn
- IsCheckCnst
- IsConstraint
- Er Default
- IsDefaultCnst
- Er deterministisk
- Er Krypteret
- Udføres
- IsExtendedProc
- IsForeignKey
- Er indekseret
- Kan indekseres
- IsInlineFunction
- ErMSShipped
- Er Præcis
- IsPrimary Key
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- Er SystemVerified
- IsTable
- IsTableFunction
- IsTrigger
- IsUniqueCnst
- IsUserTable
- IsView
- OwnerId
- SchemaId
- SystemDataAccess
- TabelDeleteTrigger
- TabelDeleteTriggerCount
- TableFullTextMergeStatus
- TabelFuldTekstBaggrundUpdateIndexOn
- TabelFuldtekstCatalogId
- TabelFuldTekstChangeTrackingOn
- TabelFuldtekstdokumenter behandlet
- TableFulltextFailCount
- TabelFuldtekstItemCount
- TabelFuldtekstNøglekolonne
- TabelFuldtekstVentende ændringer
- TabelFuldtekstBefolkningsstatus
- TabelFuldTekstSemantisk Uddrag
- TabelHasActiveFulltextIndex
- TableHasCheckCnst
- TabelHasClustIndex
- TabelHasDefaultCnst
- TabelHasDeleteTrigger
- TabelHas ForeignKey
- TabelHas ForeignRef
- TabelHasIdentity
- TabelHasIndex
- TabelHasInsertTrigger
- TabelHasNonclustIndex
- TabelHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TabelHasTimestamp
- TabelHasUniqueCnst
- TabelHasUpdateTrigger
- TabelHasVarDecimalStorageFormat
- TableInsertTrigger
- TabelInsertTriggerCount
- TabelErFalsk
- TabelIsLockedOnBulkLoad
- TableIsMemoryOptimized
- Tabel er fastgjort
- TableTextInRowLimit
- TableUpdateTrigger
- TabelUpdateTriggerCount
- Brugerdataadgang
- TabelHasColumnSet
- Kardinalitet
- TableTemporalType
Se Microsoft-dokumentationen for en detaljeret forklaring af hver egenskab.
Se også OBJECTPROPERTY()
vs OBJECTPROPERTYEX()
for en mere detaljeret forklaring af forskellene mellem disse to funktioner.