Trong SQL Server, OBJECTPROPERTYEX()
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.
Hàm này hoạt động giống hệt như OBJECTPROPERTY()
, ngoại trừ việc nó hỗ trợ nhiều thuộc tính hơn và giá trị trả về cũng khác. OBJECTPROPERTYEX()
hàm trả về sql_variant nhập, trong khi OBJECTPROPERTY()
trả về một int loại.
Cú pháp
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ề.
OBJECTPROPERTYEX ( 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 OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Kết quả:
+----------+ | Result | |----------| | U | +----------+
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. BaseType của đối tượng này là U.
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 OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Kết quả:
+----------+ | Result | |----------| | U | +----------+
Ví dụ 3 - Thuộc tính khác
Dưới đây là một ví dụ trả về nhiều thuộc tính hơn mà bạn sẽ không được trả lại với 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;
Kết quả:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
Khi viết, OBJECTPROPERTYEX()
chức năng hỗ trợ 109 thuộc tính. Xem bên dưới để biết danh sách đầy đủ các thuộc tính được hỗ trợ bởi chức năng này.
Ví dụ 4 - Trong mệnh đề WHERE
Bạn có thể sử dụng OBJECTPROPERTYEX()
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 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;
Kết quả:
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)
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 OBJECTPROPERTYEX()
chức năng:
- BaseType
- 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
- IsPrecise
- IsPrimaryKey
- Quy trình thực hiện
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- IsTable
- 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
- Cardinality
- 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.
Đồng thời xem OBJECTPROPERTY()
so với OBJECTPROPERTYEX()
để được giải thích chi tiết hơn về sự khác biệt giữa hai chức năng này.