Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise von OBJECTPROPERTY() in SQL Server

In SQL Server die OBJECTPROPERTY() -Funktion gibt Informationen zu schemabezogenen Objekten in der aktuellen Datenbank zurück.

Diese schemabezogenen Objekte sind diejenigen, die Sie sehen können, indem Sie sys.objects abfragen Systemkatalogansicht. Es kann nicht für Objekte verwendet werden, die nicht schemabezogen sind.

Sie können OBJECTPROPERTY() verwenden um zu überprüfen, ob ein Objekt eine Tabelle, eine Ansicht, eine gespeicherte Prozedur usw. ist. Sie können es auch verwenden, um zu überprüfen, ob eine Tabelle einen Primärschlüssel, einen Fremdschlüssel, eine Fremdschlüsselreferenz usw. hat.

Syntax

Die Syntax ist einfach. Die Funktion akzeptiert zwei Argumente:die ID des Objekts und die Eigenschaft, die Sie zurückgeben möchten.

OBJECTPROPERTY ( id , property )

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel, um die grundlegende Verwendung dieser Funktion zu demonstrieren.

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

Ergebnis:

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

In diesem Fall gibt es ein Objekt mit der ID 885578193 und es ist ein tisch.

Ich weiß, dass es sich um eine Tabelle handelt, weil das Ergebnis von IsTable Eigenschaft ist 1 . Wenn das Objekt keine Tabelle wäre, wäre das Ergebnis hier 0 .

Beispiel 2 – Benennen des Objekts

Im vorherigen Beispiel kannte ich die ID des Objekts. In den meisten Fällen kennen Sie wahrscheinlich nur den Namen des Objekts, aber nicht seine ID. In solchen Fällen können Sie die OBJECT_ID() verwenden Funktion, um die ID des Objekts basierend auf seinem Namen abzurufen.

So:

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

Ergebnis:

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

Beispiel 3 – Qualifizierter Objektname

Beim Aufruf der OBJECT_ID() Funktion können Sie auch einen zwei- oder dreiteiligen Namen angeben (um den Schemanamen und den Datenbanknamen einzuschließen).

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

Ergebnis:

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

Lassen Sie sich davon jedoch nicht zu der Annahme verleiten, dass OBJECTPROPERTY() wird diese Datenbank verwenden. Es wird nicht (es sei denn, es ist dasselbe wie die aktuelle Datenbank). Soweit es betroffen ist, erhält es einfach eine Objekt-ID. Wenn Sie dies vergessen, kann dies zu einem irreführenden Ergebnis führen.

Hier ist ein Beispiel zur Veranschaulichung.

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

Ergebnis:

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)

In diesem Beispiel haben zwei verschiedene Datenbanken zufällig ein Objekt mit derselben ID. Einer von ihnen ist ein Tisch und der andere nicht. Wir erhalten also bei der ersten Abfrage ein negatives Ergebnis und bei der zweiten ein positives.

Beispiel 4 – Weitere Eigenschaften

Hier ist ein Beispiel, das mehr Eigenschaften zurückgibt.

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;

Ergebnis (bei vertikaler Ausgabe):

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

Dies sind nur einige der 103 Eigenschaften, die Sie OBJECTPROPERTY() abfragen können zum. Siehe unten für eine vollständige Liste.

Beispiel 5 – In einer WHERE-Klausel

Sie können OBJECTPROPERTY() verwenden in einem WHERE Klausel, falls erforderlich.

In diesem Beispiel führe ich zwei Abfragen aus:eine, die Tabellen zurückgibt, die einen Fremdschlüssel haben, und eine, die Tabellen zurückgibt, auf die von einem Fremdschlüssel verwiesen wird.

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;

Ergebnis:

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)

Vollständige Liste der Eigenschaften

Hier ist eine vollständige Liste der Eigenschaften, die von OBJECTPROPERTY() unterstützt werden :

  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsStattTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HatAfterTrigger
  • HatDeleteTrigger
  • HatInsertTrigger
  • HatStattTrigger
  • HatUpdateTrigger
  • IstAnsiNullsOn
  • IsCheckCnst
  • IstEinschränkung
  • IstStandard
  • IstDefaultCnst
  • Ist deterministisch
  • Istverschlüsselt
  • Wird ausgeführt
  • IsExtendedProc
  • IstFremdschlüssel
  • Ist indiziert
  • IstIndexierbar
  • IstInlineFunktion
  • WirdMSVersendet
  • IstPrimaryKey
  • IstProzedur
  • IsQuotedIdentOn
  • IstWarteschlange
  • IstReplProc
  • IstRegel
  • IsScalarFunction
  • IsSchemaBound
  • IstSystemTabelle
  • IstSystemverifiziert
  • IstTabelle
  • IstTableFunction
  • IstTrigger
  • IsUniqueCnst
  • IstBenutzertabelle
  • IsView
  • Eigentümer-ID
  • SchemaId
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFulltextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • Tabelle hatFremdschlüssel
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • TableHasColumnSet
  • TableTemporalType

Eine detaillierte Erklärung jeder Eigenschaft finden Sie in der Microsoft-Dokumentation.