I SQL Server er du muligvis stødt på OBJECTPROPERTY()
funktion, kun for at finde ud af, at der også er en OBJECTPROPERTYEX()
funktion, der ser ud til at gøre nøjagtig det samme.
Hvad sker der her? Hvorfor er der behov for to funktioner, der gør det samme?
Min forståelse er, at Microsoft valgte at tilføje OBJECTPROPERTYEX()
for at udvide funktionaliteten af OBJECTPROPERTY()
, i stedet for at indføre ændringer til OBJECTPROPERTY()
der potentielt ville bryde eksisterende kode på ældre systemer.
Så der er nogle forskelle mellem de to funktioner.
Hvad er anderledes?
I en nøddeskal, OBJECTPROPERTYEX()
understøtter seks ekstra egenskaber, og dens returtype er anderledes.
Her er en oversigt.
OBJECTPROPERTY() | OBJECTPROPERTYEX() | |
---|---|---|
Returtype | int | sql_variant |
Antal understøttede egenskaber | 103 | 109 |
Ekstra egenskaber |
| |
Understøttede egenskaber |
|
|
Eksempel på de ekstra egenskaber
Her er et eksempel, der viser disse ekstra egenskaber i brug.
USE 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') AS 'UserDataAccess') AS 'UserDataAccess',' 'UserDataAccess') AS 'BrugerDataAccess,'CortJECTPROJECTINAL,'CardResultat (ved hjælp af lodret output):
BaseType | IFIs Præcis | 0SystemDataAccess | 1TabelFuldtekstSemantisk uddrag | 0UserDataAccess | 1Kardinalitet | NULLI dette tilfælde er objektet en funktion med tabelværdi, og det returnerer data for fem af de seks egenskaber.
Lad os nu i stedet sende navnet på en tabel for at se, om vi kan få en værdi for kardinalitet.
USE WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'ISPreciECTId', 'ISPreciECTIB , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS 'UserDataAccess') AS 'UserDataAccess') AS 'UserDataAccess',' 'UserDataAccess') AS 'BrugerDataAccess,'CortJECTPROJECTINAL,'CardResultat (ved hjælp af lodret output):
BaseType | U er præcis | NULLSystemDataAccess | NULLTableFuldTextSemanticExtraction | 0UserDataAccess | NULLCardinalitet | 116295Denne gang får vi NULL for tre af ejendommene, men vi får en værdi for Cardinality-ejendommen.