Fonctionnalité de sous-requête dans les contraintes de vérification
L'utilisation de sous-requêtes dans les contraintes de vérification est une limitation de longue date dans SQL-Server 2008 R2. Cet article explore le problème et propose une solution alternative à l'aide d'une fonction de retour scalaire.
Problème :
Lors de la tentative de validation d'une valeur de colonne par rapport à une autre table à l'aide d'une sous-requête dans une contrainte de vérification, l'erreur suivante est rencontrée : "Les sous-requêtes ne sont pas autorisées dans ce contexte. Seules les expressions scalaires sont autorisé."
Contexte :
Les contraintes de vérification sont utilisées pour renforcer l'intégrité de la base de données en évaluant une expression par rapport à chaque ligne insérée ou mise à jour dans une table. Généralement, ces expressions consistent en des opérations scalaires, et non en des sous-requêtes.
Solution :
Pour contourner cette limitation, une fonction de retour scalaire personnalisée peut être créée qui encapsule les éléments nécessaires sous-requête. La fonction doit générer une valeur scalaire indiquant si la condition de sous-requête est remplie.
Exemple :
Supposons que nous ayons une table appelée « Table1 » avec une colonne « MyField » qui doit être validé par rapport à une table appelée « Table2 ». Nous pouvons créer une fonction appelée 'myFunction' comme suit :
CREATE FUNCTION myFunction ( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field) return 'True' return 'False' END
Application de la fonction :
La 'myFunction' peut maintenant être utilisée dans la contrainte de vérification comme suit :
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (myFunction(MYFIELD) = 'True')
Cela émule efficacement la fonctionnalité de la sous-requête dans la vérification contrainte.
Conclusion :
Bien que les sous-requêtes ne puissent pas être directement utilisées dans les contraintes de vérification, des fonctions de retour scalaire peuvent être utilisées pour obtenir la validation souhaitée. Cette solution de contournement permet des scénarios de validation de données plus complexes sans compromettre l'intégrité de la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!