sql >> Databáze >  >> RDS >> Sqlserver

Jak funguje OBJECTPROPERTY() na serveru SQL Server

V SQL Server, OBJECTPROPERTY() Funkce vrací informace o objektech s rozsahem schématu v aktuální databázi.

Tyto objekty s rozsahem schématu jsou ty, které můžete zobrazit dotazem na sys.objects zobrazení katalogu systému. Nelze jej použít pro objekty, které nemají rozsah schématu.

Můžete použít OBJECTPROPERTY() ke kontrole, zda je objekt tabulkou, pohledem, uloženou procedurou atd. Můžete jej také použít ke kontrole, zda tabulka má primární klíč, cizí klíč, odkaz na cizí klíč atd.

Syntaxe

Syntaxe je jednoduchá. Funkce přijímá dva argumenty:ID objektu a vlastnost, kterou chcete vrátit.

OBJECTPROPERTY ( id , property )

Příklad 1 – Základní použití

Zde je příklad demonstrující základní použití této funkce.

SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 1        |
+----------+

V tomto případě se jedná o objekt s ID 885578193 a je to stůl.

Vím, že je to tabulka, protože výsledek IsTable vlastnost je 1 . Pokud by objekt nebyl tabulkou, výsledek by zde byl 0 .

Příklad 2 – Pojmenování objektu

V předchozím příkladu jsem znal ID objektu. Ve většině případů pravděpodobně budete znát pouze název objektu, ale ne jeho ID. V takových případech můžete použít OBJECT_ID() funkce k získání ID objektu na základě jeho názvu.

Takhle:

SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Příklad 3 – kvalifikovaný název objektu

Při volání OBJECT_ID() můžete také zadat název se dvěma nebo třemi částmi (včetně názvu schématu a názvu databáze).

SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Nenechte se tím však přimět, abyste si mysleli, že OBJECTPROPERTY() použije tuto databázi. Nebude (pokud náhodou není stejná jako aktuální databáze). Pokud jde o to, jednoduše přijímá ID objektu. Zapomenutí by mohlo vést k zavádějícímu výsledku.

Zde je příklad k demonstraci.

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];

Výsledek:

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)

V tomto příkladu mají dvě různé databáze objekt se stejným ID. Jeden z nich je stůl a druhý ne. Takže dostaneme negativní výsledek v prvním dotazu a pozitivní v druhém.

Příklad 4 – Další vlastnosti

Zde je příklad, který vrací více vlastností.

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;

Výsledek (při použití vertikálního výstupu):

OwnerId            | 1
SchemaId           | 6
IsTable            | 1
TableHasPrimaryKey | 1
TableHasForeignKey | 0
TableHasForeignRef | 1
TableHasIdentity   | 0

Toto jsou jen některé ze 103 vlastností, na které se můžete dotazovat OBJECTPROPERTY() pro. Úplný seznam naleznete níže.

Příklad 5 – V klauzuli WHERE

Můžete použít OBJECTPROPERTY() v WHERE doložka, je-li požadována.

V tomto příkladu spustím dva dotazy:jeden, který vrátí tabulky, které mají cizí klíč, a jeden, který vrátí tabulky, na které odkazuje cizí klíč.

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;

Výsledek:

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)

Úplný seznam vlastností

Zde je úplný seznam vlastností podporovaných funkcí OBJECTPROPERTY() :

  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HasAfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • Je výchozí
  • IsDefaultCnst
  • IsDeterministic
  • IsEncrypted
  • IsExecuted
  • IsExtendedProc
  • JeForeignKey
  • IsIndexed
  • Je indexovatelné
  • IsInlineFunction
  • IsMSShipped
  • IsPrimaryKey
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • JeUniqueCnst
  • IsUserTable
  • IsView
  • ID vlastníka
  • SchemaId
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFulltextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHasForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclusIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • TableHasColumnSet
  • TableTemporalType

Podrobné vysvětlení každé vlastnosti naleznete v dokumentaci společnosti Microsoft.


  1. Základy tabulkových výrazů, 5. část – CTE, logické úvahy

  2. Dotaz na názvy sloupců z tabulky od jiného uživatele

  3. Jak FLOOR() funguje v MariaDB

  4. Vazba parametrů na Oracle Dynamic SQL