Trong SQL Server, bạn có thể gặp phải OBJECTPROPERTY()
, chỉ để biết rằng có cả OBJECTPROPERTYEX()
chức năng dường như thực hiện chính xác điều tương tự.
Những gì đang xảy ra ở đây? Tại sao cần có hai chức năng làm cùng một việc?
Tôi hiểu là Microsoft đã chọn thêm OBJECTPROPERTYEX()
để mở rộng chức năng của OBJECTPROPERTY()
, thay vì giới thiệu các thay đổi đối với OBJECTPROPERTY()
điều đó có thể phá vỡ mã hiện có trên các hệ thống kế thừa.
Vì vậy, có một số sự khác biệt giữa hai chức năng.
Có gì khác biệt?
Tóm lại, OBJECTPROPERTYEX()
hỗ trợ sáu thuộc tính bổ sung và kiểu trả về của nó là khác nhau.
Đây là bảng phân tích.
OBJECTPROPERTY () | OBJECTPROPERTYEX () | |
---|---|---|
Loại trả lại | int | sql_variant |
Số lượng thuộc tính được hỗ trợ | 103 | 109 |
Thuộc tính bổ sung |
| |
Thuộc tính được hỗ trợ |
|
|
Ví dụ về Thuộc tính bổ sung
Dưới đây là một ví dụ cho thấy các thuộc tính bổ sung này đang được sử dụng.
SỬ DỤNG WideWorldImportersDW; DECLARE @objectId int =OBJECT_ID (N'Integration.GenerateDateDimensionColumns '); CHỌN OBJECTPROPERTYEX (@objectId,' BaseType ') AS BaseType, OBJECTPROPERTYEX (@ IsobjectId,' OBJECTPROPERTYEX (@ IsobjectId, 'OBJECTPROPERTYEX) , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX (@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX (@objectId, 'UserDataAccess') AS UserDataAccess, '' CardinalityITYEX, '@ CardinalityITYEX,'Kết quả (sử dụng đầu ra dọc):
BaseType | IFIsPrecise | 0SystemDataAccess | 1TableFullTextSemanticExtraction | 0UserDataAccess | 1Cardinality | KHÔNG CÓTrong trường hợp này, đối tượng là một hàm có giá trị bảng và nó trả về dữ liệu cho năm trong sáu thuộc tính.
Bây giờ, thay vào đó hãy chuyển vào tên của một bảng để xem liệu chúng ta có thể nhận được giá trị cho bản số hay không.
SỬ DỤNG WideWorldImportersDW; DECLARE @objectId int =OBJECT_ID (N'Dimension.City '); CHỌN OBJECTPROPERTYEX (@objectId,' BaseType ') AS BaseType, OBJECTPROPERTYEX (@objectId,' IsPrecise ') AS IsPrecise , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX (@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX (@objectId, 'UserDataAccess') AS UserDataAccess, '' CardinalityITYEX, '@ CardinalityITYEX,'Kết quả (sử dụng đầu ra dọc):
BaseType | U IsPrecise | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0UserDataAccess | NULLCardinality | 116295Lần này, chúng tôi nhận được NULL cho ba trong số các thuộc tính, nhưng chúng tôi nhận được một giá trị cho thuộc tính Cardinality.