sql >> Databasteknik >  >> RDS >> Sqlserver

Hur OBJECTPROPERTY() fungerar i SQL Server

I SQL Server, OBJECTPROPERTY() funktionen returnerar information om schemaomfattade objekt i den aktuella databasen.

Dessa schemaomfattade objekt är de du kan se genom att fråga sys.objects systemkatalogvy. Det kan inte användas för objekt som inte är schema-omfattade.

Du kan använda OBJECTPROPERTY() för att kontrollera om ett objekt är en tabell, vy, lagrad procedur, etc. Du kan också använda den för att kontrollera om en tabell har en primärnyckel, främmande nyckel, främmande nyckelreferens, etc.

Syntax

Syntaxen är enkel. Funktionen accepterar två argument:objektets ID och egenskapen du vill returnera.

OBJECTPROPERTY ( id , property )

Exempel 1 – Grundläggande användning

Här är ett exempel för att visa den grundläggande användningen av denna funktion.

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

Resultat:

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

I det här fallet finns det ett objekt med ID:t 885578193 och det är ett bord.

Jag vet att det är en tabell eftersom resultatet av IsTable egenskapen är 1 . Om objektet inte var en tabell skulle resultatet här vara 0 .

Exempel 2 – Namnge objektet

I föregående exempel kände jag till objektets ID. I de flesta fall känner du förmodligen bara till objektets namn, men inte dess ID. I sådana fall kan du använda OBJECT_ID() funktion för att få objektets ID, baserat på dess namn.

Så här:

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

Resultat:

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

Exempel 3 – Kvalificerat objektnamn

När du anropar OBJECT_ID() funktion kan du också ange ett två- eller tredelat namn (för att inkludera schemanamnet och databasnamnet).

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

Resultat:

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

Men låt inte det lura dig att tro att OBJECTPROPERTY() kommer att använda den databasen. Det kommer det inte (såvida det inte råkar vara samma som den nuvarande databasen). När det gäller det är det helt enkelt att ta emot ett objekt-ID. Att glömma detta kan leda till ett missvisande resultat.

Här är ett exempel att visa.

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

Resultat:

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)

I det här exemplet råkar två olika databaser ha ett objekt med samma ID. En av dem är ett bord och den andra är det inte. Så vi får ett negativt resultat i den första frågan och ett positivt i den andra.

Exempel 4 – Fler egenskaper

Här är ett exempel som ger fler egenskaper.

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;

Resultat (med vertikal utdata):

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

Det här är bara några av de 103 egenskaperna som du kan fråga OBJECTPROPERTY() för. Se nedan för en fullständig lista.

Exempel 5 – I en WHERE-klausul

Du kan använda OBJECTPROPERTY() i en WHERE klausul om så krävs.

I det här exemplet kör jag två frågor:en som returnerar tabeller som har en främmande nyckel och en som returnerar tabeller som refereras av en främmande nyckel.

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;

Resultat:

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)

Fullständig lista över egenskaper

Här är en fullständig lista över egenskaper som stöds av 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
  • Har AfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • ÄrDefault
  • IsDefaultCnst
  • Är deterministisk
  • Är krypterad
  • Utförs
  • IsExtendedProc
  • IsForeignKey
  • Är indexerad
  • Är indexerbar
  • IsInlineFunction
  • Skickas MS
  • IsPrimaryKey
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • Ägar-ID
  • SchemaId
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TabellFulltextChangeTrackingOn
  • TableFulltextDocs Processed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TabellFulltextKeyColumn
  • TabellFulltextPendingChanges
  • TabellFulltextPopuleraStatus
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHas ForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TabellHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • TableHasColumnSet
  • TableTemporalType

Se Microsofts dokumentation för en detaljerad förklaring av varje egenskap.


  1. Hur man ansluter GraphQL och PostgreSQL

  2. Hur man konverterar rader till kolumner i Oracle-tabellen

  3. Hur undkommer jag % från python mysql-frågan

  4. MySQL:Dela upp kommaseparerad lista i flera rader