Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterabfragen in Check Constraint

Beachten Sie, was Sie wirklich wollen, ist eine Fremdschlüsselbeschränkung. Das heißt, um eine "Abfrage" in eine Prüfung zu bekommen, können Sie eine Funktion schreiben, die die Abfrage enthält und einen skalaren Wert ausgibt, und diese Funktion dann in der Prüfungsbeschränkung verwenden.

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

Sowas in der Art. Nicht getestet.

Dann kannst du es so zu deinem Scheck hinzufügen

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