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

Jak działa OBJECTPROPERTY() w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz oświadczenie, aby znaleźć duplikaty w określonych polach

  2. Spłaszczanie przecinających się przedziałów czasowych

  3. SQL Server COALESCE() Objaśnienie

  4. Sprawdź, czy obiekt jest procedurą składowaną, używając OBJECTPROPERTY() w SQL Server

  5. Użyj SCOPE_IDENTITY(), aby zwrócić ostatnio wstawioną wartość tożsamości w tym samym zakresie (SQL Server)