sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan fungerer OBJECTPROPERTY() i SQL Server

I SQL Server er OBJECTPROPERTY() funktion returnerer oplysninger om skema-omfattede objekter i den aktuelle database.

Disse skema-omfattede objekter er dem, du kan se ved at forespørge på sys.objects systemkatalogvisning. Det kan ikke bruges til objekter, der ikke er skema-omfattede.

Du kan bruge OBJECTPROPERTY() for at kontrollere, om et objekt er en tabel, visning, lagret procedure osv. Du kan også bruge den til at kontrollere, om en tabel har en primærnøgle, fremmednøgle, fremmednøglereference osv.

Syntaks

Syntaksen er enkel. Funktionen accepterer to argumenter:objektets ID og den egenskab, du ønsker returneret.

OBJECTPROPERTY ( id , property )

Eksempel 1 – Grundlæggende brug

Her er et eksempel for at demonstrere den grundlæggende brug af denne funktion.

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

Resultat:

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

I dette tilfælde er der et objekt med et ID på 885578193 og det er et bord.

Jeg ved, at det er en tabel, fordi resultatet af IsTable egenskaben er 1 . Hvis objektet ikke var en tabel, ville resultatet her være 0 .

Eksempel 2 – Navngivning af objektet

I det forrige eksempel kendte jeg objektets ID. I de fleste tilfælde kender du sandsynligvis kun objektets navn, men ikke dets ID. I sådanne tilfælde kan du bruge OBJECT_ID() funktion for at få objektets ID, baseret på dets navn.

Sådan:

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

Resultat:

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

Eksempel 3 – Kvalificeret objektnavn

Når du kalder OBJECT_ID() funktion, kan du også angive et to- eller tredelt navn (for at inkludere skemanavnet og databasenavnet).

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

Resultat:

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

Men lad det ikke narre dig til at tro, at OBJECTPROPERTY() vil bruge den database. Det vil det ikke (medmindre det tilfældigvis er det samme som den aktuelle database). For så vidt angår det, modtager det simpelthen et objekt-id. At glemme dette kan føre til et vildledende resultat.

Her er et eksempel til at demonstrere.

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 dette eksempel har to forskellige databaser tilfældigvis et objekt med det samme ID. En af dem er et bord, og den anden er ikke. Så vi får et negativt resultat i den første forespørgsel og et positivt i den anden.

Eksempel 4 – Flere egenskaber

Her er et eksempel, der returnerer flere egenskaber.

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 (ved hjælp af lodret output):

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

Dette er blot nogle af de 103 egenskaber, som du kan forespørge på OBJECTPROPERTY() til. Se nedenfor for en komplet liste.

Eksempel 5 – I en WHERE-klausul

Du kan bruge OBJECTPROPERTY() i en WHERE klausul om nødvendigt.

I dette eksempel kører jeg to forespørgsler:en, der returnerer tabeller, der har en fremmednøgle, og en, der returnerer tabeller, der refereres til af en fremmednøgle.

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)

Fuld liste over egenskaber

Her er en komplet liste over egenskaber, der understøttes af 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
  • HarAfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • Er Default
  • IsDefaultCnst
  • Er deterministisk
  • Er Krypteret
  • Udføres
  • IsExtendedProc
  • IsForeignKey
  • Er indekseret
  • Kan indekseres
  • IsInlineFunction
  • ErMSShipped
  • IsPrimary Key
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • Er SystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • OwnerId
  • SchemaId
  • TabelDeleteTrigger
  • TabelDeleteTriggerCount
  • TableFullTextMergeStatus
  • TabelFuldTekstBaggrundUpdateIndexOn
  • TabelFuldtekstCatalogId
  • TabelFuldtekstChangeTrackingOn
  • TabelFuldtekstdokumenter behandlet
  • TableFulltextFailCount
  • TabelFuldtekstItemCount
  • TabelFuldtekstNøglekolonne
  • TabelFuldtekstVentende ændringer
  • TabelFuldtekstBefolkningsstatus
  • TabelHasActiveFulltextIndex
  • TableHasCheckCnst
  • TabelHasClustIndex
  • TabelHasDefaultCnst
  • TabelHasDeleteTrigger
  • TabelHas ForeignKey
  • TabelHas ForeignRef
  • TabelHasIdentity
  • TabelHasIndex
  • TabelHasInsertTrigger
  • TabelHasNonclustIndex
  • TabelHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TabelHasTimestamp
  • TabelHasUniqueCnst
  • TabelHasUpdateTrigger
  • TabelHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TabelInsertTriggerCount
  • TabelErFalsk
  • TabelIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • Tabel er fastgjort
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TabelUpdateTriggerCount
  • TabelHasColumnSet
  • TableTemporalType

Se Microsoft-dokumentationen for en detaljeret forklaring af hver egenskab.


  1. Sådan ændres databaseadgangskoden

  2. Hvordan justify_hours() virker i PostgreSQL

  3. PostgreSQL-streaming vs logisk replikering – sammenligning

  4. AMD, Intel og PostgreSQL