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 ?

Comment puis-je utiliser des sous-requêtes dans les contraintes de vérification de SQL Server 2008 R2 ?

DDD
DDDoriginal
2025-01-03 18:20:39585parcourir

How Can I Use Subqueries in SQL Server 2008 R2 Check Constraints?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn