Dans SQL Server, le OBJECTPROPERTY()
La fonction renvoie des informations sur les objets de portée schéma dans la base de données actuelle.
Ces objets à portée de schéma sont ceux que vous pouvez voir en interrogeant sys.objects
vue du catalogue système. Il ne peut pas être utilisé pour les objets qui ne sont pas limités au schéma.
Vous pouvez utiliser OBJECTPROPERTY()
pour vérifier si un objet est une table, une vue, une procédure stockée, etc. Vous pouvez également l'utiliser pour vérifier si une table a une clé primaire, une clé étrangère, une référence de clé étrangère, etc.
Syntaxe
La syntaxe est simple. La fonction accepte deux arguments :l'ID de l'objet et la propriété que vous souhaitez renvoyer.
OBJECTPROPERTY ( id , property )
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer l'utilisation de base de cette fonction.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Résultat :
+----------+ | Result | |----------| | 1 | +----------+
Dans ce cas, il y a un objet avec un ID de 885578193
et c'est une table.
Je sais que c'est une table car le résultat de la commande IsTable
la propriété est 1
. Si l'objet n'était pas une table, le résultat ici serait 0
.
Exemple 2 - Nommer l'objet
Dans l'exemple précédent, je connaissais l'ID de l'objet. Dans la plupart des cas, vous ne connaîtrez probablement que le nom de l'objet, mais pas son ID. Dans de tels cas, vous pouvez utiliser le OBJECT_ID()
fonction pour obtenir l'ID de l'objet, en fonction de son nom.
Comme ceci :
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Résultat :
+----------+ | Result | |----------| | 1 | +----------+
Exemple 3 - Nom d'objet qualifié
Lors de l'appel de OBJECT_ID()
fonction, vous pouvez également fournir un nom en deux ou trois parties (pour inclure le nom du schéma et le nom de la base de données).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Résultat :
+----------+ | Result | |----------| | 1 | +----------+
Cependant, ne laissez pas cela vous tromper en pensant que OBJECTPROPERTY()
utilisera cette base de données. Ce ne sera pas le cas (à moins que ce ne soit la même que la base de données actuelle). En ce qui le concerne, il reçoit simplement un ID d'objet. Oublier cela pourrait conduire à un résultat trompeur.
Voici un exemple pour illustrer.
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];
Résultat :
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)
Dans cet exemple, deux bases de données différentes ont un objet avec le même ID. L'un d'eux est une table et l'autre non. Nous obtenons donc un résultat négatif à la première requête et positif à la seconde.
Exemple 4 - Plus de propriétés
Voici un exemple qui renvoie plus de propriétés.
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;
Résultat (en utilisant la sortie verticale) :
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Ce ne sont que quelques-unes des 103 propriétés que vous pouvez interroger OBJECTPROPERTY()
pour. Voir ci-dessous pour une liste complète.
Exemple 5 – Dans une clause WHERE
Vous pouvez utiliser OBJECTPROPERTY()
dans un WHERE
clause si nécessaire.
Dans cet exemple, j'exécute deux requêtes :une qui renvoie les tables qui ont une clé étrangère et une qui renvoie les tables qui sont référencées par une clé étrangère.
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;
Résultat :
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)
Liste complète des propriétés
Voici une liste complète des propriétés prises en charge par 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
- EstAnsiNullsOn
- IsCheckCnst
- IsConstraint
- EstParDéfaut
- IsDefaultCnst
- Est déterministe
- IsEncrypted
- Est exécuté
- IsExtendedProc
- IsForeignKey
- Est indexé
- Est indexable
- IsInlineFunction
- IsMSShipped
- IsPrimaryKey
- EstProcédure
- IsQuotedIdentOn
- EstQueue
- IsReplProc
- EstRègle
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- EstTable
- EstTableFonction
- EstTrigger
- IsUniqueCnst
- IsUserTable
- IsView
- Identifiant du propriétaire
- ID de schéma
- 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
Consultez la documentation Microsoft pour une explication détaillée de chaque propriété.