In SQL Server bent u mogelijk de OBJECTPROPERTY()
. tegengekomen functie, om erachter te komen dat er ook een OBJECTPROPERTYEX()
. is functie die precies hetzelfde lijkt te doen.
Wat is hier aan de hand? Waarom zijn er twee functies nodig die hetzelfde doen?
Ik heb begrepen dat Microsoft ervoor heeft gekozen om OBJECTPROPERTYEX()
. toe te voegen om de functionaliteit van OBJECTPROPERTY()
uit te breiden , in plaats van wijzigingen aan te brengen in OBJECTPROPERTY()
die mogelijk bestaande code op oudere systemen zou breken.
Er zijn dus sommige verschillen tussen de twee functies.
Wat is er anders?
In een notendop, OBJECTPROPERTYEX()
ondersteunt zes extra eigenschappen en het retourtype is anders.
Hier is een uitsplitsing.
OBJECTEIGENSCHAP() | OBJECTPROPERTYEX() | |
---|---|---|
Retourtype | int | sql_variant |
Aantal ondersteunde eigenschappen | 103 | 109 |
Extra eigenschappen |
| |
Ondersteunde eigenschappen |
|
|
Voorbeeld van de extra eigenschappen
Hier is een voorbeeld dat deze extra eigenschappen in gebruik laat zien.
USE WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsPrecise') , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') ASPERDataAccess>-kaart) ASPERDataJccess-kaartResultaat (met verticale uitvoer):
Basistype | IFI'sPrecieze | 0SysteemDataToegang | 1TableFullTextSemanticExtraction | 0GebruikersgegevensToegang | 1Kardinaliteit | NULLIn dit geval is het object een functie met tabelwaarde en retourneert het gegevens voor vijf van de zes eigenschappen.
Laten we nu in plaats daarvan de naam van een tabel doorgeven om te zien of we een waarde voor kardinaliteit kunnen krijgen.
GEBRUIK WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise, OBJECTPROPERTYEX(@objectId, 'BaseType') , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') ASPERDataAccess>-kaart, Resultaat (met verticale uitvoer):Basistype | U IsPrecise | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0GebruikersgegevensToegang | NULLKardinaliteit | 116295Deze keer krijgen we NULL voor drie van de eigenschappen, maar we krijgen wel een waarde voor de eigenschap Cardinality.