Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как OBJECTPROPERTY() работи в SQL Server

В 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 за подробно обяснение на всяко свойство.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. най-добрият начин за конвертиране и валидиране на низ от дата

  2. Календарна таблица за Data Warehouse

  3. Нулиране на AutoIncrement в SQL Server след изтриване

  4. SQL Server:Динамична клауза where

  5. SQL заявка за избор на низ между два известни низа