Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Sub query in vincolo di controllo

Nota, quello che vuoi veramente è un vincolo di chiave esterna. Detto questo, per ottenere una "query" in un controllo puoi scrivere una funzione che contiene la query e restituisce un valore scalare, quindi utilizzare quella funzione nel vincolo di controllo.

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

Qualcosa del genere. Non testato.

Quindi puoi aggiungerlo al tuo assegno in questo modo

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