W SQL Server możesz napotkać OBJECTPROPERTY()
funkcji, tylko po to, by dowiedzieć się, że istnieje również funkcja OBJECTPROPERTYEX()
funkcja, która wydaje się robić dokładnie to samo.
Co tu się dzieje? Dlaczego potrzebne są dwie funkcje, które robią to samo?
Rozumiem, że Microsoft zdecydował się dodać OBJECTPROPERTYEX()
aby rozszerzyć funkcjonalność OBJECTPROPERTY()
, zamiast wprowadzać zmiany w OBJECTPROPERTY()
które potencjalnie złamałyby istniejący kod w starszych systemach.
Więc jest niektóre różnice między tymi dwiema funkcjami.
Co jest inne?
Krótko mówiąc, OBJECTPROPERTYEX()
obsługuje sześć dodatkowych właściwości, a typ zwracany jest inny.
Oto podział.
WŁAŚCIWOŚĆ OBIEKTU() | WŁASNOŚĆ OBIEKTU() | |
---|---|---|
Typ zwrotu | int | sql_variant |
Liczba obsługiwanych właściwości | 103 | 109 |
Dodatkowe właściwości |
| |
Obsługiwane właściwości |
|
|
Przykład dodatkowych właściwości
Oto przykład, który pokazuje te dodatkowe właściwości w użyciu.
USE WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsOBJECT(IsobProciseTY', ) , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess, OBJECTPROPERTYEX(@'objectID'; CardinalWynik (przy użyciu wyjścia pionowego):
Typ bazowy | IFIPrecyzyjne | 0SystemDataAccess | 1TabelaPełnyTekstWyodrębnianie Semantyczne | 0Dostęp do DanychUżytkownika | 1Kardynalność | NULLW tym przypadku obiekt jest funkcją o wartości tabeli i zwraca dane dla pięciu z sześciu właściwości.
Teraz zamiast tego przejdźmy do nazwy tabeli, aby zobaczyć, czy możemy uzyskać wartość dla kardynalności.
USE WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsPrecise') ASJECTOBPERIdEX, . , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess, OBJECTPROPERTYEX(@'objectID'; CardinalWynik (przy użyciu wyjścia pionowego):
Typ bazowy | U jest precyzyjny | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0Dostęp do DanychUżytkownika | NULLKardynalność | 116295Tym razem otrzymujemy NULL dla trzech właściwości, ale otrzymujemy wartość właściwości Cardinality.