SQL - добавить условие If else в CHECK Constraint

Я пытаюсь установить условие в ограничении CHECK. Сценарий

  1. Когда столбец1 равен нулю, никаких действий не требуется
  2. Если столбец1 не равен нулю, тогда столбец3 должен иметь определенный код

Например, если студент спросил (1), то он должен был выполнить действие (посетить как код 1 или позвонить как код 2)

table-IMG

CREATE TABLE [dbo].[enquiry_details](
    [Id] uniqueidentifier NOT NULL,
    [Name] [varchar] (100) NOT NULL,
    [Enquired] [int] NULL,
    [location] [int] NOT NULL,
    [Action_Type] [int] NULL,
     -- CONSTRAINT menu_key CHECK ((Enquired IS NOT NULL)and Action_Type IN ('11','22'))
     --CONSTRAINT menu_key CHECK (IF(Enquired!= null)  Action_Type IN ('11','22'))
     CONSTRAINT menu_key CHECK (IF(Enquired is not null)  Action_Type IN ('11','22'))
    -- CONSTRAINT menu_keyi CHECK (CASE WHEN Enquired IS NOT NULL THEN Action_Type IN ('11','22') END)
     -- CONSTRAINT menu_keyi CHECK (CASE WHEN LEN(Enquired)>0 THEN (Action_Type '11' OR Action_Type='22') ELSE NULL END)
) 

person Vasanth    schedule 27.08.2020    source источник
comment
Добавляйте свои данные в виде форматированного текста вместо изображения — лучше для всех.   -  person Dale K    schedule 27.08.2020
comment
@Damien Даже это не работает CONSTRAINT menu_key CHECK (((Enquired IS NULL) OR (Enquired is not null AND [Action_Type] IN ('11','22'))))   -  person Vasanth    schedule 28.08.2020


Ответы (1)


Не думайте о запуске условного кода — просто подумайте о формировании единого фрагмента логики:

CONSTRAINT menu_key CHECK (Enquired is null OR  Action_Type IN ('11','22'))

Первая часть OR будет ложной, если Enquired не равно нулю, и в этом случае только вторая часть OR может удовлетворить общему условию.

person Damien_The_Unbeliever    schedule 27.08.2020
comment
Я может быть не понятно объяснил. @Damien Ваше решение будет работать частично, но вот что именно нужно ВСТАВИТЬ В [enquiry_details] VALUES(1,ABC,1,5,11); - Будет вставлено INSERT INTO [enquiry_details] VALUES(5,JKL,NULL,7,66); - Выдает ошибку, но ожидает, что она будет вставлена ​​INSERT INTO [enquiry_details] VALUES(5,XYZ,NULL,7,11); -- Вставится, но этот шойлд не вставится - person Vasanth; 27.08.2020