In SQL Server, de OBJECTPROPERTY()
functie retourneert informatie over objecten met schemabereik in de huidige database.
Deze objecten met schemabereik zijn degene die u kunt zien door de sys.objects
. op te vragen systeemcatalogus bekijken. Het kan niet worden gebruikt voor objecten die niet binnen een schema vallen.
U kunt OBJECTPROPERTY()
. gebruiken om te controleren of een object een tabel, weergave, opgeslagen procedure, enz. is. U kunt het ook gebruiken om te controleren of een tabel een primaire sleutel, externe sleutel, externe sleutelreferentie, enz. heeft.
Syntaxis
De syntaxis is eenvoudig. De functie accepteert twee argumenten:de ID van het object en de eigenschap die u wilt retourneren.
OBJECTPROPERTY ( id , property )
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om het basisgebruik van deze functie te demonstreren.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Resultaat:
+----------+ | Result | |----------| | 1 | +----------+
In dit geval is er een object met een ID van 885578193
en het is een tafel.
Ik weet dat het een tabel is omdat het resultaat van de IsTable
eigenschap is 1
. Als het object geen tabel was, zou het resultaat hier 0
. zijn .
Voorbeeld 2 – Het object een naam geven
In het vorige voorbeeld kende ik de ID van het object. In de meeste gevallen weet u waarschijnlijk alleen de naam van het object, maar niet de ID. In dergelijke gevallen kunt u de OBJECT_ID()
. gebruiken functie om de ID van het object te krijgen, gebaseerd op de naam.
Zoals dit:
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Resultaat:
+----------+ | Result | |----------| | 1 | +----------+
Voorbeeld 3 – Naam gekwalificeerd object
Bij het aanroepen van de OBJECT_ID()
functie, kunt u ook een twee- of driedelige naam opgeven (om de schemanaam en de databasenaam op te nemen).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Resultaat:
+----------+ | Result | |----------| | 1 | +----------+
Laat u echter niet misleiden door te denken dat OBJECTPROPERTY()
zal die database gebruiken. Het zal niet (tenzij het hetzelfde is als de huidige database). Wat het betreft ontvangt het gewoon een object-ID. Als u dit vergeet, kan dit leiden tot een misleidend resultaat.
Hier is een voorbeeld om te demonstreren.
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];
Resultaat:
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 dit voorbeeld hebben twee verschillende databases toevallig een object met dezelfde ID. De ene is een tafel en de andere niet. We krijgen dus een negatief resultaat in de eerste zoekopdracht en een positief resultaat in de tweede.
Voorbeeld 4 – Meer eigenschappen
Hier is een voorbeeld dat meer eigenschappen retourneert.
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;
Resultaat (met verticale uitvoer):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Dit zijn slechts enkele van de 103 eigenschappen die u kunt opvragen OBJECTPROPERTY()
voor. Zie hieronder voor een volledige lijst.
Voorbeeld 5 – In een WHERE-clausule
U kunt OBJECTPROPERTY()
. gebruiken in een WHERE
clausule indien nodig.
In dit voorbeeld voer ik twee query's uit:een die tabellen retourneert met een externe sleutel en een die tabellen retourneert waarnaar wordt verwezen door een externe sleutel.
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;
Resultaat:
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)
Volledige lijst van eigendommen
Hier is een volledige lijst met eigenschappen die worden ondersteund door 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
- IsDefault
- IsDefaultCnst
- IsDeterministisch
- IsEncrypted
- IsUitgevoerd
- IsExtendedProc
- IsForeignKey
- IsIndexed
- IsIndexable
- IsInlineFunction
- IsMSShipped
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- IsTable
- IsTableFunction
- IsTrigger
- IsUniqueCnst
- IsUserTable
- IsView
- OwnerId
- SchemaId
- TableDeleteTrigger
- TableDeleteTriggerCount
- TableFullTextMergeStatus
- TableFullTextBackgroundUpdateIndexOn
- TableFulltextCatalogId
- TableFulltextChangeTrackingOn
- TableFulltextDocsProcessed
- TableFulltextFailCount
- TableFulltextItemCount
- TableFulltextKeyColumn
- TableFulltextPendingChanges
- TableFulltextPopulateStatus
- TableHasActiveFulltextIndex
- TableHasCheckCnst
- TableHasClustIndex
- TableHasDefaultCnst
- TableHasDeleteTrigger
- TableHasForeignKey
- TableHasForeignRef
- TableHasIdentity
- TableHasIndex
- TableHasInsertTrigger
- TableHasNonclustIndex
- TableHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TableHasTimestamp
- TableHasUniqueCnst
- TableHasUpdateTrigger
- TableHasVarDecimalStorageFormat
- TableInsertTrigger
- TableInsertTriggerCount
- TableIsFake
- TableIsLockedOnBulkLoad
- TableIsMemoryOptimized
- TableIsPinned
- TableTextInRowLimit
- TableUpdateTrigger
- TableUpdateTriggerCount
- TableHasColumnSet
- TableTemporalType
Zie de Microsoft-documentatie voor een gedetailleerde uitleg van elke eigenschap.