I SQL Server kan du ha stött på OBJECTPROPERTY()
funktion, bara för att ta reda på att det också finns en OBJECTPROPERTYEX()
funktion som verkar göra exakt samma sak.
Vad händer här? Varför behövs två funktioner som gör samma sak?
Jag förstår att Microsoft valde att lägga till OBJECTPROPERTYEX()
för att utöka funktionaliteten för OBJECTPROPERTY()
, snarare än att införa ändringar i OBJECTPROPERTY()
som potentiellt skulle bryta befintlig kod på äldre system.
Så det finns några skillnader mellan de två funktionerna.
Vad är annorlunda?
I ett nötskal, OBJECTPROPERTYEX()
stöder sex extra egenskaper, och dess returtyp är annorlunda.
Här är en uppdelning.
OBJECTPROPERTY() | OBJECTPROPERTYEX() | |
---|---|---|
Returtyp | int | sql_variant |
Antal egenskaper som stöds | 103 | 109 |
Extra egenskaper |
| |
Egenskaper som stöds |
|
|
Exempel på de extra egenskaperna
Här är ett exempel som visar dessa extra egenskaper som används.
ANVÄND WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROjectId(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROjectIdex , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,PresentProperty, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess, Presentkort, AS UserDataAccess,Resultat (med vertikal utdata):
BaseType | IFIsPrecis | 0SystemDataAccess | 1TabellFullTextSemanticExtraction | 0UserDataAccess | 1Kardinalitet | NULLI det här fallet är objektet en funktion med tabellvärde, och det returnerar data för fem av de sex egenskaperna.
Låt oss nu istället skicka in namnet på en tabell för att se om vi kan få ett värde för kardinalitet.
ANVÄND WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'ISPreciECTId', 'ISPreciECTId') ASJECTI , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,PresentProperty, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess, Presentkort, AS UserDataAccess,Resultat (med vertikal utdata):
BaseType | U är precis | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0UserDataAccess | NULLKardinalitet | 116295Den här gången får vi NULL för tre av fastigheterna, men vi får ett värde för Cardinality-egenskapen.