V SQL Server, OBJECTPROPERTYEX()
funkce vrací informace o objektech s rozsahem schématu v aktuální databázi.
Tato funkce dělá přesně to samé jako OBJECTPROPERTY()
, kromě toho, že podporuje více vlastností a návratová hodnota je jiná. OBJECTPROPERTYEX()
funkce vrací sql_variant typ, zatímco OBJECTPROPERTY()
vrátí int typ.
Syntaxe
Funkce přijímá dva argumenty:ID objektu a vlastnost, kterou chcete vrátit.
OBJECTPROPERTYEX ( id , property )
Příklad 1 – Základní použití
Zde je příklad demonstrující základní použití této funkce.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Výsledek:
+----------+ | Result | |----------| | U | +----------+
V tomto případě se jedná o objekt s ID 885578193
a je to stůl. BaseType tohoto objektu je U.
Příklad 2 – Pojmenování objektu
V předchozím příkladu jsem znal ID objektu. Ve většině případů pravděpodobně budete znát pouze název objektu, ale ne jeho ID. V takových případech můžete použít OBJECT_ID()
funkce k získání ID objektu na základě jeho názvu.
Takhle:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Výsledek:
+----------+ | Result | |----------| | U | +----------+
Příklad 3 – Další vlastnosti
Zde je příklad, který vrací více vlastností, které nevrátíte pomocí 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;
Výsledek:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
Při psaní OBJECTPROPERTYEX()
funkce podporuje 109 vlastností. Níže naleznete úplný seznam vlastností podporovaných touto funkcí.
Příklad 4 – V klauzuli WHERE
Můžete použít OBJECTPROPERTYEX()
v WHERE
doložka, je-li požadována.
V tomto příkladu spustím dva dotazy:jeden, který vrátí tabulky, které mají cizí klíč, a jeden, který vrátí tabulky, na které odkazuje cizí klíč.
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;
Výsledek:
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)
Úplný seznam vlastností
Zde je úplný seznam vlastností podporovaných OBJECTPROPERTYEX()
funkce:
- 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
- HasAfterTrigger
- HasDeleteTrigger
- HasInsertTrigger
- HasInsteadOfTrigger
- HasUpdateTrigger
- IsAnsiNullsOn
- IsCheckCnst
- IsConstraint
- Je výchozí
- IsDefaultCnst
- IsDeterministic
- IsEncrypted
- IsExecuted
- IsExtendedProc
- JeForeignKey
- IsIndexed
- Je indexovatelné
- IsInlineFunction
- IsMSShipped
- Je Přesné
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- IsTable
- IsTableFunction
- IsTrigger
- JeUniqueCnst
- IsUserTable
- IsView
- ID vlastníka
- 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
- TableHasNonclusIndex
- TableHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TableHasTimestamp
- TableHasUniqueCnst
- TableHasUpdateTrigger
- TableHasVarDecimalStorageFormat
- TableInsertTrigger
- TableInsertTriggerCount
- TableIsFake
- TableIsLockedOnBulkLoad
- TableIsMemoryOptimized
- TableIsPinned
- TableTextInRowLimit
- TableUpdateTrigger
- TableUpdateTriggerCount
- UserDataAccess
- TableHasColumnSet
- Kardinalita
- TableTemporalType
Podrobné vysvětlení každé vlastnosti naleznete v dokumentaci společnosti Microsoft.
Viz také OBJECTPROPERTY()
vs OBJECTPROPERTYEX()
pro podrobnější vysvětlení rozdílů mezi těmito dvěma funkcemi.