【问题标题】:SQL - Add If else condition in CHECK ConstraintSQL - 在检查约束中添加 If else 条件
【发布时间】:2020-08-27 09:56:43
【问题描述】:

我正在尝试在 CHECK 约束中设置条件。场景是

  1. 当 column1 为空时,不需要任何操作
  2. 如果 column1 不为 null,则 column3 必须已定义代码

例如,如果学生查询了 (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)
) 

【问题讨论】:

  • 将您的数据添加为格式化文本而不是图像 - 对每个人都更好。
  • @Damien 即使这样也不起作用 CONSTRAINT menu_key CHECK (((Enquired IS NULL) OR (Enquired is not null AND [Action_Type] IN ('11','22'))))

标签: sql-server if-statement case check-constraints


【解决方案1】:

不要考虑运行条件代码 - 只需考虑形成一个单一的逻辑:

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

如果Enquired不为null,则OR的第一部分为false,此时只有OR的第二部分可以满足整体条件。

【讨论】:

  • 我可能解释不清楚。 @Damien您的解决方案将部分工作,但这是真正需要的 INSERT INTO [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); -- 会被插入,但不会被插入
猜你喜欢
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
相关资源
最近更新 更多