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
Libérer: 2025-01-03 18:20:39
original
624 Les gens l'ont consulté

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))
Copier après la connexion

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
Copier après la connexion

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))
    Copier après la connexion
  • Utiliser IN avec un sous-sélectionner :

    CHECK (MyField IN (SELECT Field FROM Table2))
    Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal