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

Utilisez OBJECTPROPERTY() pour savoir si un objet est une contrainte CHECK dans SQL Server

Dans SQL Server, vous pouvez utiliser le OBJECTPROPERTY() fonction pour savoir si oui ou non un objet est un CHECK contrainte.

Cette fonction accepte deux paramètres :l'ID de l'objet et la propriété pour laquelle vous le vérifiez.

Par conséquent, vous pouvez passer l'ID d'objet comme premier argument, et IsCheckCnst comme deuxième, et la fonction renverra soit un 1 ou un 0 selon qu'il s'agit ou non d'un CHECK contrainte.

Une valeur de retour de 1 signifie qu'il est un CHECK contrainte, et une valeur de 0 signifie que ce n'est pas le cas.

Exemple 1 - Vérification d'une contrainte CHECK

Voici un exemple rapide à démontrer.

USE Test;
SELECT OBJECTPROPERTY(178099675, 'IsCheckCnst') AS [IsCheckCnst];

Résultat :

+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

Dans ce cas, le Test la base de données a un objet avec l'ID fourni, et c'est en fait un CHECK contrainte.

Exemple 2 - Obtenir l'ID d'objet

Si vous connaissez le nom de l'objet, mais pas son ID, vous pouvez utiliser le OBJECT_ID() fonction pour récupérer l'ID en fonction de son nom.

Exemple :

SELECT OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Résultat :

+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

Dans ce cas, j'ai vérifié le même objet de l'exemple précédent.

Le voici à nouveau avec la sortie de l'ID séparément.

SELECT 
  OBJECT_ID('chkEndDate') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Résultat :

+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 178099675   | 1             |
+-------------+---------------+

Exemple 3 - Vérification d'une table (c'est-à-dire PAS une contrainte CHECK)

Voici ce qui se passe lorsque l'objet n'est pas un CHECK contrainte.

SELECT OBJECTPROPERTY(18099105, 'IsCheckCnst') AS [IsCheckCnst];

Résultat :

+---------------+
| IsCheckCnst   |
|---------------|
| 0             |
+---------------+

Dans ce cas, la base de données fait j'ai en fait un objet avec cet ID, mais l'objet est en fait une table, donc j'obtiens un résultat négatif.

Le voici à nouveau en utilisant OBJECT_ID() .

SELECT 
  OBJECT_ID('Individual') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Individual'), 'IsCheckCnst') AS [IsCheckCnst];

Résultat :

+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 18099105    | 0             |
+-------------+---------------+

Exemple 4 - L'objet n'existe pas

SQL Server suppose que l'ID d'objet se trouve dans le contexte de base de données actuel. Si vous transmettez un ID d'objet d'une autre base de données, vous obtiendrez soit un résultat NULL, soit des résultats incorrects.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('NonExistentObject'), 'IsCheckCnst') AS [NonExistentObject],
  OBJECTPROPERTY(11111111, 'IsCheckCnst') AS [11111111];

Résultat :

+---------------------+------------+
| NonExistentObject   | 11111111   |
|---------------------+------------|
| NULL                | NULL       |
+---------------------+------------+

Dans ce cas, la base de données ne contient aucun objet portant ce nom ou cet ID.