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.