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.