Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách hoạt động của OBJECTPROPERTY () trong SQL Server

Trong SQL Server, OBJECTPROPERTY() hàm trả về thông tin về các đối tượng trong phạm vi lược đồ trong cơ sở dữ liệu hiện tại.

Các đối tượng trong phạm vi lược đồ này là những đối tượng bạn có thể thấy bằng cách truy vấn sys.objects xem danh mục hệ thống. Nó không thể được sử dụng cho các đối tượng không thuộc phạm vi giản đồ.

Bạn có thể sử dụng OBJECTPROPERTY() để kiểm tra xem một đối tượng có phải là bảng, dạng xem, thủ tục được lưu trữ hay không, v.v. Bạn cũng có thể sử dụng nó để kiểm tra xem bảng có khóa chính, khóa ngoại, tham chiếu khóa ngoại, v.v.

Cú pháp

Cú pháp rất đơn giản. Hàm chấp nhận hai đối số:ID của đối tượng và thuộc tính bạn muốn trả về.

OBJECTPROPERTY ( id , property )

Ví dụ 1 - Cách sử dụng cơ bản

Dưới đây là một ví dụ để chứng minh cách sử dụng cơ bản của chức năng này.

SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;

Kết quả:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Trong trường hợp này, có một đối tượng có ID là 885578193 và đó là một cái bàn.

Tôi biết rằng đó là một bảng vì kết quả của IsTable thuộc tính là 1 . Nếu đối tượng không phải là một bảng, kết quả ở đây sẽ là 0 .

Ví dụ 2 - Đặt tên cho Đối tượng

Trong ví dụ trước, tôi đã biết ID của đối tượng. Trong hầu hết các trường hợp, bạn có thể chỉ biết tên của đối tượng chứ không biết ID của nó. Trong những trường hợp như vậy, bạn có thể sử dụng OBJECT_ID() để lấy ID của đối tượng, dựa trên tên của nó.

Như thế này:

SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;

Kết quả:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Ví dụ 3 - Tên Đối tượng Đủ điều kiện

Khi gọi OBJECT_ID() , bạn cũng có thể cung cấp tên hai hoặc ba phần (bao gồm tên lược đồ và tên cơ sở dữ liệu).

SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;

Kết quả:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Tuy nhiên, đừng để điều đó đánh lừa bạn rằng OBJECTPROPERTY() sẽ sử dụng cơ sở dữ liệu đó. Nó sẽ không (trừ khi nó giống với cơ sở dữ liệu hiện tại). Theo như những gì liên quan, nó chỉ đơn giản là nhận một ID đối tượng. Quên điều này có thể dẫn đến một kết quả sai lệch.

Đây là một ví dụ để chứng minh.

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];

Kết quả:

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)

Trong ví dụ này, hai cơ sở dữ liệu khác nhau xảy ra có một đối tượng có cùng ID. Một trong số chúng là một cái bàn và cái còn lại thì không. Vì vậy, chúng tôi nhận được kết quả âm trong truy vấn đầu tiên và dương trong truy vấn thứ hai.

Ví dụ 4 - Thuộc tính khác

Dưới đây là một ví dụ trả về nhiều thuộc tính hơn.

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;

Kết quả (sử dụng đầu ra dọc):

OwnerId            | 1
SchemaId           | 6
IsTable            | 1
TableHasPrimaryKey | 1
TableHasForeignKey | 0
TableHasForeignRef | 1
TableHasIdentity   | 0

Đây chỉ là một số thuộc tính trong số 103 thuộc tính mà bạn có thể truy vấn OBJECTPROPERTY() vì. Xem bên dưới để biết danh sách đầy đủ.

Ví dụ 5 - Trong mệnh đề WHERE

Bạn có thể sử dụng OBJECTPROPERTY() trong một WHERE nếu được yêu cầu.

Trong ví dụ này, tôi chạy hai truy vấn:một truy vấn trả về các bảng có khóa ngoại và một truy vấn trả về các bảng được tham chiếu bởi khóa ngoại.

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;

Kết quả:

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)

Danh sách đầy đủ các thuộc tính

Đây là danh sách đầy đủ các thuộc tính được hỗ trợ bởi 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
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • IsDefault
  • IsDefaultCnst
  • IsDeterministic
  • IsEncrypto
  • Được thực thi
  • IsExtendedProc
  • IsForeignKey
  • IsIndexed
  • Có thể lập chỉ mục
  • IsInlineFunction
  • IsMSShipped
  • IsPrimaryKey
  • Quy trình thực hiện
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • IsTable
  • 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

Xem tài liệu của Microsoft để biết giải thích chi tiết về từng thuộc tính.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @@ LỖI và / hoặc THỬ - CATCH

  2. Trả về danh sách các trình kích hoạt trong SQL Server

  3. UPSERT nguyên tử trong SQL Server 2005

  4. Vi phạm ràng buộc UNIQUE KEY trên INSERT WHERE COUNT (*) =0 trên SQL Server 2005

  5. Lọc theo Tùy chọn OFFSET-FETCH trong Truy vấn chọn - Hướng dẫn SQL Server / TSQL Phần 118