Na serveru SQL Server jste možná narazili na OBJECTPROPERTY()
funkce, jen abyste zjistili, že existuje také OBJECTPROPERTYEX()
funkce, která vypadá, že dělá přesně to samé.
Co se tam děje? Proč potřebujete dvě funkce, které dělají totéž?
Chápu to tak, že Microsoft se rozhodl přidat OBJECTPROPERTYEX()
pro rozšíření funkčnosti OBJECTPROPERTY()
, spíše než zavádět změny do OBJECTPROPERTY()
které by potenciálně narušily stávající kód na starších systémech.
Takže nějaké existují rozdíly mezi těmito dvěma funkcemi.
V čem se liší?
Stručně řečeno, OBJECTPROPERTYEX()
podporuje šest dalších vlastností a jeho návratový typ je jiný.
Zde je rozpis.
OBJECTPROPERTY() | OBJECTPROPERTYEX() | |
---|---|---|
Typ návratu | int | sql_variant |
Počet podporovaných vlastností | 103 | 109 |
Další vlastnosti |
| |
Podporované vlastnosti |
|
|
Příklad doplňkových vlastností
Zde je příklad, který ukazuje použití těchto dalších vlastností.
USE WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTY,sPreciEX(se'object)IsdPROCIEX , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'ASerDataTYAccess'(@ject) AS UserDataJECTdPROccessinEXSI,obardinity,Výsledek (při použití vertikálního výstupu):
BaseType | IFIsPrecise | 0SystemDataAccess | 1TableFullTextSemanticExtraction | 0UserDataAccess | 1Kardinalita | NULLV tomto případě je objektem funkce s tabulkovou hodnotou a vrací data pro pět ze šesti vlastností.
Nyní místo toho předáme název tabulky, abychom zjistili, zda můžeme získat hodnotu pro mohutnost.
USE WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsPreciEXseobject')IsPreciEXseobject')IsPreciSEobject , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'ASerDataTYAccess'(@ject) AS UserDataJECTdPROccessinEXSI,obardinity,Výsledek (při použití vertikálního výstupu):
BaseType | U IsPrecise | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0UserDataAccess | NULLCardinalita | 116295Tentokrát dostaneme NULL pro tři vlastnosti, ale získáme hodnotu pro vlastnost Cardinality.