Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

OBJECTPROPERTY() vs OBJECTPROPERTYEX() w SQL Server:jaka jest różnica?

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
  • Typ podstawowy
  • Jest precyzyjny
  • Dostęp do danych systemowych
  • TableFullTextSemanticExtraction
  • Dostęp do danych użytkownika
  • Kardynalność
Obsługiwane właściwości
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsWyłączone
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDelete Trigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerWyłączone
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • Ma po wyzwoleniu
  • Ma usuwanie wyzwalacza
  • MaInsertTrigger
  • HasInsteadOfTrigger
  • Ma wyzwalacz aktualizacji
  • IsAnsiNullsOn
  • IsCheckCnst
  • Jest ograniczeniem
  • Jest domyślna
  • IsDefaultCnst
  • Jest deterministyczny
  • Jest zaszyfrowany
  • Wykonane
  • IsExtendedProc
  • IsForeignKey
  • Jest indeksowany
  • Jest indeksowalny
  • IsInlineFunction
  • Jest wysyłany
  • IsPrimaryKey
  • Jest procedura
  • Identyfikator jest cytowany
  • W kolejce
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • Zweryfikowano system
  • IsTable
  • IsTableFunction
  • IsTrigger
  • Is UniqueCnst
  • IsUserTable
  • IsView
  • Identyfikator właściciela
  • Identyfikator schematu
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TabelaFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFulltextChangeTrackingOn
  • TableFulltextDocsProcess
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • Tabela ma aktywny indeks pełnotekstowy
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • Tabela ma wyzwalacz usuwania
  • Tabela ma klucz obcy
  • Tabela ma obcy ref
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • Tabela ma indeks Nonclust
  • Tabela ma klucz podstawowy
  • TableHasRowGuidCol
  • TabelaHasTextImage
  • Tabela ma znacznik czasu
  • Tabela ma unikalny Cnst
  • TableHasUpdateTrigger
  • Tabela ma format dziesiętny pamięci
  • TableInsertTrigger
  • TableInsertTriggerCount
  • Tabela jest fałszywa
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • Tabela jest przypięta
  • TableTextInRowLimit
  • Table UpdateTrigger
  • TableUpdateTriggerCount
  • Tabela ma zestaw kolumn
  • TableTemporalType
  • Typ podstawowy
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsWyłączone
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDelete Trigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerWyłączone
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • Ma po wyzwoleniu
  • Ma usuwanie wyzwalacza
  • MaInsertTrigger
  • HasInsteadOfTrigger
  • Ma wyzwalacz aktualizacji
  • IsAnsiNullsOn
  • IsCheckCnst
  • Jest ograniczeniem
  • Jest domyślna
  • IsDefaultCnst
  • Jest deterministyczny
  • Jest zaszyfrowany
  • Wykonane
  • IsExtendedProc
  • IsForeignKey
  • Jest indeksowany
  • Jest indeksowalny
  • IsInlineFunction
  • Jest wysyłany
  • Jest precyzyjny
  • IsPrimaryKey
  • Jest procedura
  • Identyfikator jest cytowany
  • W kolejce
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • Zweryfikowano system
  • IsTable
  • IsTableFunction
  • IsTrigger
  • Is UniqueCnst
  • IsUserTable
  • IsView
  • Identyfikator właściciela
  • Identyfikator schematu
  • Dostęp do danych systemowych
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TabelaFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocsProcess
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableFullTextSemanticExtraction
  • Tabela ma aktywny indeks pełnotekstowy
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • Tabela ma wyzwalacz usuwania
  • Tabela ma klucz obcy
  • Tabela ma obcy ref
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • Tabela ma indeks Nonclust
  • Tabela ma klucz podstawowy
  • TableHasRowGuidCol
  • TabelaHasTextImage
  • Tabela ma znacznik czasu
  • Tabela ma unikalny Cnst
  • TableHasUpdateTrigger
  • Tabela ma format dziesiętny pamięci
  • TableInsertTrigger
  • TableInsertTriggerCount
  • Tabela jest fałszywa
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • Tabela jest przypięta
  • TableTextInRowLimit
  • Table UpdateTrigger
  • TableUpdateTriggerCount
  • Dostęp do danych użytkownika
  • Tabela ma zestaw kolumn
  • Kardynalność
  • TableTemporalType

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'; Cardinal 

Wynik (przy użyciu wyjścia pionowego):

Typ bazowy | IFIPrecyzyjne | 0SystemDataAccess | 1TabelaPełnyTekstWyodrębnianie Semantyczne | 0Dostęp do DanychUżytkownika | 1Kardynalność | NULL

W 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'; Cardinal 

Wynik (przy użyciu wyjścia pionowego):

Typ bazowy | U jest precyzyjny | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0Dostęp do DanychUżytkownika | NULLKardynalność | 116295

Tym razem otrzymujemy NULL dla trzech właściwości, ale otrzymujemy wartość właściwości Cardinality.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. uzyskaj nowy identyfikator rekordu SQL

  2. SQL Server Management Studio (SSMS)

  3. Jak usunąć przy użyciu INNER JOIN w programie SQL Server?

  4. Jak uzyskać wynik zmiennoprzecinkowy, dzieląc dwie wartości całkowite za pomocą T-SQL?

  5. JPA SQL Server bez mapowania dialektu dla typu JDBC:-9