В SQL Server, OBJECTPROPERTYEX()
функцията връща информация за обекти с обхват на схема в текущата база данни.
Тази функция прави точно същото като OBJECTPROPERTY()
, с изключение на това, че поддържа повече свойства и връщаната стойност е различна. OBJECTPROPERTYEX()
функцията връща sql_variant тип, докато OBJECTPROPERTY()
връща int тип.
Синтаксис
Функцията приема два аргумента:ID на обекта и свойството, което искате да бъде върнато.
OBJECTPROPERTYEX ( id , property )
Пример 1 – Основна употреба
Ето пример за демонстриране на основното използване на тази функция.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Резултат:
+----------+ | Result | |----------| | U | +----------+
В този случай има обект с идентификатор 885578193
и това е маса. Основният тип на този обект е U.
Пример 2 – Именуване на обекта
В предишния пример знаех идентификатора на обекта. В повечето случаи вероятно ще знаете само името на обекта, но не и неговия идентификатор. В такива случаи можете да използвате OBJECT_ID()
функция за получаване на идентификатора на обекта въз основа на неговото име.
Като това:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Резултат:
+----------+ | Result | |----------| | U | +----------+
Пример 3 – Още свойства
Ето пример, който връща повече от свойствата, които няма да ви бъдат върнати с 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;
Резултат:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
Към момента на писане, OBJECTPROPERTYEX()
функцията поддържа 109 свойства. Вижте по-долу за пълен списък на свойствата, поддържани от тази функция.
Пример 4 – В клауза WHERE
Можете да използвате OBJECTPROPERTYEX()
в WHERE
клауза, ако е необходимо.
В този пример изпълнявам две заявки:едната, която връща таблици, които имат външен ключ, и една, която връща таблици, които са реферирани от външен ключ.
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;
Резултат:
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)
Пълен списък със свойства
Ето пълен списък на свойствата, поддържани от OBJECTPROPERTYEX()
функция:
- Базов тип
- 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
- Има DeleteTrigger
- HasInsertTrigger
- HasInsteadOfTrigger
- HasUpdateTrigger
- IsAnsiNullsOn
- IsCheckCnst
- IsConstraint
- По подразбиране
- IsDefaultCnst
- Едетерминистично
- Шифровано
- Изпълнено
- IsExtendedProc
- IsForeignKey
- Индексирано е
- Индексира се
- IsInlineFunction
- Изпратено е MSS
- Е точен
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- Опашка за търсене
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- SystemVerified
- Стабилно
- 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
- UserDataAccess
- TableHasColumnSet
- Кардиналност
- TableTemporalType
Вижте документацията на Microsoft за подробно обяснение на всяко свойство.
Вижте също OBJECTPROPERTY()
срещу OBJECTPROPERTYEX()
за по-подробно обяснение на разликите между тези две функции.