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

Sous-requêtes dans la contrainte de vérification

Notez que ce que vous voulez vraiment, c'est une contrainte de clé étrangère. Cela dit, pour obtenir une "requête" dans une vérification, vous pouvez écrire une fonction qui contient la requête et génère une valeur scalaire, puis utiliser cette fonction dans la contrainte de vérification.

CREATE FUNCTION myFunction (
    @field DATATYPE(?)
)
RETURNS VARCHAR(5)
AS
BEGIN
    IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field)
        return 'True'
    return 'False'
END

Quelque chose comme ca. Non testé.

Ensuite, vous pouvez l'ajouter à votre chèque comme ceci

ALTER TABLE Table1
    WITH CHECK ADD CONSTRAINT CK_Code
    CHECK (myFunction(MYFIELD) = 'True')