Maison >base de données >tutoriel mysql >Comment puis-je utiliser des sous-requêtes dans les contraintes de vérification de SQL Server 2008 R2 ?
Sous-requêtes dans les contraintes de vérification : une solution de contournement
Dans SQL Server 2008 R2, l'utilisation de sous-requêtes dans les contraintes de vérification déclenche un message d'erreur indiquant que seuls les scalaires les expressions sont autorisées. Par exemple, le code suivant vise à vérifier une colonne du tableau 1 par rapport aux valeurs du tableau 2 lors de l'insertion de données :
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (MyField in (Select Field From Table2))
Résoudre l'erreur
Pour contourner cette limitation, envisager des approches alternatives :
1. Utilisation d'une fonction :
Convertissez la sous-requête en une fonction qui renvoie une valeur scalaire (par exemple, True ou False) indiquant si la valeur existe dans l'autre table. Ensuite, utilisez la fonction dans la contrainte check.
Par exemple :
CREATE FUNCTION myFunction ( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field) return 'True' return 'False' END
2. Syntaxe alternative :
Dans certains cas, il est possible de réécrire la contrainte de vérification en utilisant une syntaxe alternative qui évite les sous-requêtes :
Utilisation d'EXISTS :
CHECK (EXISTS (SELECT* FROM Table2 WHERE MYFIELD = MyField))
Utiliser IN avec un sous-sélectionner :
CHECK (MyField IN (SELECT Field FROM Table2))
3. Contrainte de clé étrangère :
Si la relation entre les tables représente une véritable relation de clé étrangère, la solution la plus appropriée est d'utiliser une contrainte de clé étrangère. Cela renforce l'intégrité référentielle et garantit la cohérence des données.
En implémentant l'une des solutions de contournement mentionnées, vous pouvez utiliser une fonctionnalité de type sous-requête dans les contraintes de vérification, mais avec des considérations supplémentaires telles que l'implémentation de fonctions ou l'utilisation d'une syntaxe alternative.
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!