В SQL Server може да сте срещнали OBJECTPROPERTY()
функция, само за да разберете, че има и OBJECTPROPERTYEX()
функция, която изглежда прави точно същото нещо.
Какво става тук? Защо има нужда от две функции, които правят едно и също нещо?
Моето разбиране е, че Microsoft избра да добави OBJECTPROPERTYEX()
за да разширите функционалността на OBJECTPROPERTY()
, вместо да въвеждат промени в OBJECTPROPERTY()
което потенциално би разбило съществуващия код на наследени системи.
Така че има някои разлики между двете функции.
Какво е различно?
Накратко, OBJECTPROPERTYEX()
поддържа шест допълнителни свойства и неговият тип връщане е различен.
Ето разбивка.
OBJECTPROPERTY() | OBJECTPROPERTYEX() | |
---|---|---|
Тип връщане | int | sql_variant |
Брой поддържани свойства | 103 | 109 |
Допълнителни свойства |
| |
Поддържани свойства |
|
|
Пример за допълнителните свойства
Ето пример, който показва тези допълнителни свойства, които се използват.
ИЗПОЛЗВАЙТЕ WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');ИЗБЕРЕТЕ OBJECTPROPERTYEX(@objectId, 'BaseType') КАТО BaseType, OBJECTPROPERTYEX, OBJECTPROPERTYEX, OBJECTPROPERTYEX, OBJECTPROPERTYEX, OBJECTPROPERTYEX, OBJECT. , 'SystemDataAccess') КАТО SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') КАТО TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') 'UserDataAccess') 'UserDataAccess')Резултат (с помощта на вертикален изход):
BaseType | IFIsPrecise | 0SystemDataAccess | 1TableFullTextSemanticExtraction | 0UserDataAccess | 1 Кардиналност | NULLВ този случай обектът е функция с таблична стойност и връща данни за пет от шестте свойства.
Сега нека вместо това да предадем името на таблица, за да видим дали можем да получим стойност за мощност.
ИЗПОЛЗВАЙТЕ WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');ИЗБЕРЕТЕ OBJECTPROPERTYEX(@objectId, 'BaseType') КАТО BaseType, OBJECTPROPERTYEX(@objectId@objectPrecise'd КАТО ПРОЕКТ Е , 'SystemDataAccess') КАТО SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') КАТО TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') 'UserDataAccess') 'UserDataAccess')Резултат (с помощта на вертикален изход):
BaseType | U IsPrecise | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0UserDataAccess | NULLКардиналност | 116295Този път получаваме NULL за три от свойствата, но получаваме стойност за свойството Cardinality.