W SQL Server OBJECTPROPERTYEX()
funkcja zwraca informacje o obiektach o zakresie schematu w bieżącej bazie danych.
Ta funkcja robi dokładnie to samo, co OBJECTPROPERTY()
, z tą różnicą, że obsługuje więcej właściwości, a zwracana wartość jest inna. OBJECTPROPERTYEX()
funkcja zwraca sql_variant typ, natomiast OBJECTPROPERTY()
zwraca int typ.
Składnia
Funkcja przyjmuje dwa argumenty:identyfikator obiektu i właściwość, którą chcesz zwrócić.
OBJECTPROPERTYEX ( id , property )
Przykład 1 – Podstawowe użycie
Oto przykład demonstrujący podstawowe użycie tej funkcji.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Wynik:
+----------+ | Result | |----------| | U | +----------+
W tym przypadku istnieje obiekt o identyfikatorze 885578193
i to jest stół. BaseType tego obiektu to U.
Przykład 2 – Nazywanie obiektu
W poprzednim przykładzie znałem identyfikator obiektu. W większości przypadków prawdopodobnie znasz tylko nazwę obiektu, ale nie jego identyfikator. W takich przypadkach możesz użyć OBJECT_ID()
funkcja, aby uzyskać identyfikator obiektu na podstawie jego nazwy.
Tak:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Wynik:
+----------+ | Result | |----------| | U | +----------+
Przykład 3 – Więcej właściwości
Oto przykład, który zwraca więcej właściwości, które nie zostaną zwrócone za pomocą OBJECTPROPERTY()
.
USE WideWorldImportersDW; DECLARE @objectId int = OBJECT_ID(N'Integration.GenerateDateDimensionColumns'); SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise, OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess;
Wynik:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
W chwili pisania OBJECTPROPERTYEX()
funkcja obsługuje 109 właściwości. Zobacz poniżej pełną listę właściwości obsługiwanych przez tę funkcję.
Przykład 4 – W klauzuli WHERE
Możesz użyć OBJECTPROPERTYEX()
w WHERE
klauzula, jeśli jest wymagana.
W tym przykładzie uruchamiam dwa zapytania:jedno, które zwraca tabele, które mają klucz obcy, i drugie, które zwraca tabele, do których odwołuje się klucz obcy.
USE Music; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') = 1; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignRef') = 1;
Wynik:
Changed database context to 'Music'. +----------+---------+ | Schema | Table | |----------+---------| | dbo | Artists | | dbo | Albums | +----------+---------+ (2 rows affected) +----------+---------+ | Schema | Table | |----------+---------| | dbo | Artists | | dbo | Genres | | dbo | Country | +----------+---------+ (3 rows affected)
Pełna lista właściwości
Oto pełna lista właściwości obsługiwanych przez OBJECTPROPERTYEX()
funkcja:
- 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
Zapoznaj się z dokumentacją firmy Microsoft, aby uzyskać szczegółowe wyjaśnienie każdej właściwości.
Zobacz także OBJECTPROPERTY()
vs OBJECTPROPERTYEX()
aby uzyskać bardziej szczegółowe wyjaśnienie różnic między tymi dwiema funkcjami.