В SQL Server, OBJECTPROPERTY()
функцията връща информация за обекти с обхват на схема в текущата база данни.
Тези обекти с обхват на схема са тези, които можете да видите, като направите заявка в sys.objects
изглед на системния каталог. Не може да се използва за обекти, които не са с обхват на схема.
Можете да използвате OBJECTPROPERTY()
за да проверите дали даден обект е таблица, изглед, съхранена процедура и т.н. Можете също да го използвате, за да проверите дали дадена таблица има първичен ключ, външен ключ, препратка към външен ключ и т.н.
Синтаксис
Синтаксисът е прост. Функцията приема два аргумента:ID на обекта и свойството, което искате да бъде върнато.
OBJECTPROPERTY ( id , property )
Пример 1 – Основна употреба
Ето пример за демонстриране на основното използване на тази функция.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Резултат:
+----------+ | Result | |----------| | 1 | +----------+
В този случай има обект с идентификатор 885578193
и това е маса.
Знам, че това е таблица, защото резултатът от IsTable
свойството е 1
. Ако обектът не беше таблица, резултатът тук би бил 0
.
Пример 2 – Именуване на обекта
В предишния пример знаех идентификатора на обекта. В повечето случаи вероятно ще знаете само името на обекта, но не и неговия идентификатор. В такива случаи можете да използвате OBJECT_ID()
функция за получаване на идентификатора на обекта въз основа на неговото име.
Като това:
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Резултат:
+----------+ | Result | |----------| | 1 | +----------+
Пример 3 – Квалифицирано име на обект
При извикване на OBJECT_ID()
функция, можете също да предоставите име от две или три части (за да включите името на схемата и името на базата данни).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Резултат:
+----------+ | Result | |----------| | 1 | +----------+
Въпреки това, не позволявайте това да ви подведе да си помислите, че OBJECTPROPERTY()
ще използва тази база данни. Няма да стане (освен ако не е същото като текущата база данни). Що се отнася до това, той просто получава идентификатор на обект. Забравянето на това може да доведе до подвеждащ резултат.
Ето пример за демонстрация.
USE WideWorldImportersDW; SELECT OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID], OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME], OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable]; USE Music; SELECT OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID], OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME], OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable];
Резултат:
Changed database context to 'WideWorldImportersDW'. +-------------+---------------+-----------+ | OBJECT_ID | OBJECT_NAME | IsTable | |-------------+---------------+-----------| | 885578193 | CityKey | 0 | +-------------+---------------+-----------+ (1 row affected) Changed database context to 'Music'. +-------------+---------------+-----------+ | OBJECT_ID | OBJECT_NAME | IsTable | |-------------+---------------+-----------| | 885578193 | Artists | 1 | +-------------+---------------+-----------+ (1 row affected)
В този пример две различни бази данни имат обект със същия идентификатор. Едната от тях е маса, а другата не. Така че получаваме отрицателен резултат при първата заявка и положителен във втората.
Пример 4 – Още свойства
Ето пример, който връща повече свойства.
USE WideWorldImportersDW; DECLARE @objectId int = OBJECT_ID(N'Dimension.City'); SELECT OBJECTPROPERTY(@objectId, 'OwnerId') AS OwnerId, OBJECTPROPERTY(@objectId, 'SchemaId') AS SchemaId, OBJECTPROPERTY(@objectId, 'IsTable') AS IsTable, OBJECTPROPERTY(@objectId, 'TableHasPrimaryKey') AS TableHasPrimaryKey, OBJECTPROPERTY(@objectId, 'TableHasForeignKey') AS TableHasForeignKey, OBJECTPROPERTY(@objectId, 'TableHasForeignRef') AS TableHasForeignRef, OBJECTPROPERTY(@objectId, 'TableHasIdentity') AS TableHasIdentity;
Резултат (с помощта на вертикален изход):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Това са само някои от 103-те свойства, към които можете да заявите OBJECTPROPERTY()
за. Вижте по-долу за пълен списък.
Пример 5 – В клауза WHERE
Можете да използвате OBJECTPROPERTY()
в WHERE
клауза, ако е необходимо.
В този пример изпълнявам две заявки:едната, която връща таблици, които имат външен ключ, и една, която връща таблици, които са реферирани от външен ключ.
USE WideWorldImporters; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTY(object_id, 'TableHasForeignKey') = 1; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTY(object_id, 'TableHasForeignRef') = 1;
Резултат:
Changed database context to 'WideWorldImporters'. +-------------+-----------------------+ | Schema | Table | |-------------+-----------------------| | Warehouse | Colors | | Sales | OrderLines | | Warehouse | PackageTypes | | Warehouse | StockGroups | | Warehouse | StockItemStockGroups | | Application | StateProvinces | | Sales | CustomerTransactions | | Application | Cities | | Application | SystemParameters | | Sales | InvoiceLines | | Purchasing | Suppliers | | Warehouse | StockItemTransactions | | Sales | Customers | | Purchasing | PurchaseOrders | | Sales | Orders | | Application | People | | Warehouse | StockItems | | Application | Countries | | Warehouse | StockItemHoldings | | Purchasing | PurchaseOrderLines | | Application | DeliveryMethods | | Application | PaymentMethods | | Purchasing | SupplierTransactions | | Application | TransactionTypes | | Sales | SpecialDeals | | Purchasing | SupplierCategories | | Sales | BuyingGroups | | Sales | Invoices | | Sales | CustomerCategories | +-------------+-----------------------+ (29 rows affected) +-------------+--------------------+ | Schema | Table | |-------------+--------------------| | Warehouse | Colors | | Warehouse | PackageTypes | | Warehouse | StockGroups | | Application | StateProvinces | | Application | Cities | | Purchasing | Suppliers | | Sales | Customers | | Purchasing | PurchaseOrders | | Sales | Orders | | Application | People | | Warehouse | StockItems | | Application | Countries | | Application | DeliveryMethods | | Application | PaymentMethods | | Application | TransactionTypes | | Purchasing | SupplierCategories | | Sales | BuyingGroups | | Sales | Invoices | | Sales | CustomerCategories | +-------------+--------------------+ (19 rows affected)
Пълен списък със свойства
Ето пълен списък на свойствата, поддържани от OBJECTPROPERTY()
:
- 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
- TableDeleteTrigger
- TableDeleteTriggerCount
- TableFullTextMergeStatus
- TableFullTextBackgroundUpdateIndexOn
- TableFulltextCatalogId
- TableFulltextChangeTrackingOn
- TableFulltextDocsProcessed
- TableFulltextFailCount
- TableFulltextItemCount
- TableFulltextKeyColumn
- TableFulltextPendingChanges
- TableFulltextPopulateStatus
- 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
- TableHasColumnSet
- TableTemporalType
Вижте документацията на Microsoft за подробно обяснение на всяко свойство.