Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctionnement de OBJECTPROPERTYEX() dans SQL Server

Dans SQL Server, le OBJECTPROPERTYEX() La fonction renvoie des informations sur les objets de portée de schéma dans la base de données actuelle.

Cette fonction fait exactement la même chose que OBJECTPROPERTY() , sauf qu'il prend en charge davantage de propriétés et que la valeur de retour est différente. Le OBJECTPROPERTYEX() la fonction renvoie un sql_variant type, alors que OBJECTPROPERTY() renvoie un int saisir.

Syntaxe

La fonction accepte deux arguments :l'ID de l'objet et la propriété que vous souhaitez renvoyer.

OBJECTPROPERTYEX ( id , property )

Exemple 1 - Utilisation de base

Voici un exemple pour illustrer l'utilisation de base de cette fonction.

SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;

Résultat :

+----------+
| Result   |
|----------|
| U        |
+----------+

Dans ce cas, il y a un objet avec un ID de 885578193 et c'est une table. Le BaseType de cet objet est U.

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 OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;

Résultat :

+----------+
| Result   |
|----------|
| U        |
+----------+

Exemple 3 – Plus de propriétés

Voici un exemple qui renvoie plus de propriétés que vous ne recevrez pas avec OBJECTPROPERTY() .

USE WideWorldImportersDW;
DECLARE @objectId int = OBJECT_ID(N'Integration.GenerateDateDimensionColumns');
SELECT 
  OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType,
  OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise,
  OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess,
  OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess;

Résultat :

+------------+-------------+--------------------+------------------+
| BaseType   | IsPrecise   | SystemDataAccess   | UserDataAccess   |
|------------+-------------+--------------------+------------------|
| IF         | 0           | 1                  | 1                |
+------------+-------------+--------------------+------------------+

Au moment de l'écriture, le OBJECTPROPERTYEX() la fonction prend en charge 109 propriétés. Voir ci-dessous pour une liste complète des propriétés prises en charge par cette fonction.

Exemple 4 – Dans une clause WHERE

Vous pouvez utiliser OBJECTPROPERTYEX() 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 Music;
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') = 1;

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignRef') = 1;

Résultat :

Changed database context to 'Music'.
+----------+---------+
| Schema   | Table   |
|----------+---------|
| dbo      | Artists |
| dbo      | Albums  |
+----------+---------+
(2 rows affected)
+----------+---------+
| Schema   | Table   |
|----------+---------|
| dbo      | Artists |
| dbo      | Genres  |
| dbo      | Country |
+----------+---------+
(3 rows affected)

Liste complète des propriétés

Voici une liste complète des propriétés prises en charge par le OBJECTPROPERTYEX() fonction :

  • Type de base
  • 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
  • Est précis
  • 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
  • Accès aux données système
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableFullTextSemanticExtraction
  • 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
  • Accès aux données utilisateur
  • TableHasColumnSet
  • Cardinalité
  • TableTemporalType

Consultez la documentation Microsoft pour une explication détaillée de chaque propriété.

Voir aussi OBJECTPROPERTY() vs OBJECTPROPERTYEX() pour une explication plus détaillée des différences entre ces deux fonctions.