W SQL Server OBJECTPROPERTY()
funkcja zwraca informacje o obiektach o zakresie schematu w bieżącej bazie danych.
Te obiekty o zasięgu schematu są tymi, które można zobaczyć, wysyłając zapytanie do sys.objects
widok katalogu systemowego. Nie można go używać do obiektów, które nie są objęte zakresem schematu.
Możesz użyć OBJECTPROPERTY()
aby sprawdzić, czy obiekt jest tabelą, widokiem, procedurą składowaną itp. Można go również użyć do sprawdzenia, czy tabela ma klucz podstawowy, klucz obcy, odwołanie do klucza obcego itp.
Składnia
Składnia jest prosta. Funkcja przyjmuje dwa argumenty:identyfikator obiektu i właściwość, którą chcesz zwrócić.
OBJECTPROPERTY ( id , property )
Przykład 1 – Podstawowe użycie
Oto przykład demonstrujący podstawowe użycie tej funkcji.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Wynik:
+----------+ | Result | |----------| | 1 | +----------+
W tym przypadku istnieje obiekt o identyfikatorze 885578193
i to jest stół.
Wiem, że to tabela, ponieważ wynik IsTable
właściwość to 1
. Gdyby obiekt nie był tabelą, wynikiem byłoby 0
.
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 OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Wynik:
+----------+ | Result | |----------| | 1 | +----------+
Przykład 3 – kwalifikowana nazwa obiektu
Podczas wywoływania OBJECT_ID()
funkcji, możesz również podać dwu- lub trzyczęściową nazwę (w tym nazwę schematu i nazwę bazy danych).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Wynik:
+----------+ | Result | |----------| | 1 | +----------+
Nie daj się jednak zwieść, że OBJECTPROPERTY()
użyje tej bazy danych. Nie będzie (chyba że jest taka sama jak bieżąca baza danych). Jeśli o to chodzi, po prostu otrzymuje identyfikator obiektu. Zapomnienie o tym może prowadzić do mylącego wyniku.
Oto przykład do zademonstrowania.
USE WideWorldImportersDW; SELECT OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID], OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME], OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable]; USE Music; SELECT OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID], OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME], OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable];
Wynik:
Changed database context to 'WideWorldImportersDW'. +-------------+---------------+-----------+ | OBJECT_ID | OBJECT_NAME | IsTable | |-------------+---------------+-----------| | 885578193 | CityKey | 0 | +-------------+---------------+-----------+ (1 row affected) Changed database context to 'Music'. +-------------+---------------+-----------+ | OBJECT_ID | OBJECT_NAME | IsTable | |-------------+---------------+-----------| | 885578193 | Artists | 1 | +-------------+---------------+-----------+ (1 row affected)
W tym przykładzie dwie różne bazy danych mają obiekt o tym samym identyfikatorze. Jeden z nich to stół, a drugi nie. Tak więc w pierwszym zapytaniu otrzymujemy wynik negatywny, a w drugim pozytywny.
Przykład 4 – Więcej właściwości
Oto przykład, który zwraca więcej właściwości.
USE WideWorldImportersDW; DECLARE @objectId int = OBJECT_ID(N'Dimension.City'); SELECT OBJECTPROPERTY(@objectId, 'OwnerId') AS OwnerId, OBJECTPROPERTY(@objectId, 'SchemaId') AS SchemaId, OBJECTPROPERTY(@objectId, 'IsTable') AS IsTable, OBJECTPROPERTY(@objectId, 'TableHasPrimaryKey') AS TableHasPrimaryKey, OBJECTPROPERTY(@objectId, 'TableHasForeignKey') AS TableHasForeignKey, OBJECTPROPERTY(@objectId, 'TableHasForeignRef') AS TableHasForeignRef, OBJECTPROPERTY(@objectId, 'TableHasIdentity') AS TableHasIdentity;
Wynik (przy użyciu wyjścia pionowego):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
To tylko niektóre ze 103 właściwości, o które możesz zapytać OBJECTPROPERTY()
dla. Zobacz poniżej pełną listę.
Przykład 5 – W klauzuli WHERE
Możesz użyć OBJECTPROPERTY()
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 WideWorldImporters; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTY(object_id, 'TableHasForeignKey') = 1; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTY(object_id, 'TableHasForeignRef') = 1;
Wynik:
Changed database context to 'WideWorldImporters'. +-------------+-----------------------+ | Schema | Table | |-------------+-----------------------| | Warehouse | Colors | | Sales | OrderLines | | Warehouse | PackageTypes | | Warehouse | StockGroups | | Warehouse | StockItemStockGroups | | Application | StateProvinces | | Sales | CustomerTransactions | | Application | Cities | | Application | SystemParameters | | Sales | InvoiceLines | | Purchasing | Suppliers | | Warehouse | StockItemTransactions | | Sales | Customers | | Purchasing | PurchaseOrders | | Sales | Orders | | Application | People | | Warehouse | StockItems | | Application | Countries | | Warehouse | StockItemHoldings | | Purchasing | PurchaseOrderLines | | Application | DeliveryMethods | | Application | PaymentMethods | | Purchasing | SupplierTransactions | | Application | TransactionTypes | | Sales | SpecialDeals | | Purchasing | SupplierCategories | | Sales | BuyingGroups | | Sales | Invoices | | Sales | CustomerCategories | +-------------+-----------------------+ (29 rows affected) +-------------+--------------------+ | Schema | Table | |-------------+--------------------| | Warehouse | Colors | | Warehouse | PackageTypes | | Warehouse | StockGroups | | Application | StateProvinces | | Application | Cities | | Purchasing | Suppliers | | Sales | Customers | | Purchasing | PurchaseOrders | | Sales | Orders | | Application | People | | Warehouse | StockItems | | Application | Countries | | Application | DeliveryMethods | | Application | PaymentMethods | | Application | TransactionTypes | | Purchasing | SupplierCategories | | Sales | BuyingGroups | | Sales | Invoices | | Sales | CustomerCategories | +-------------+--------------------+ (19 rows affected)
Pełna lista właściwości
Oto pełna lista właściwości obsługiwanych przez OBJECTPROPERTY()
:
- 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
Zapoznaj się z dokumentacją firmy Microsoft, aby uzyskać szczegółowe wyjaśnienie każdej właściwości.