You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server CHECK约束内使用CASE语句报非布尔类型表达式错误如何解决

报错原因

SQL Server 的 CHECK 约束要求括号内的表达式必须返回布尔类型(TRUE/FALSE),你当前的写法中,CASE 语句返回的是数值 1,不符合布尔表达式要求,因此触发了非布尔类型表达式的报错。同时你的CASE未补充ELSE分支,不匹配条件时会返回NULL,也不符合约束校验的逻辑要求。

修正方案

推荐直接用逻辑运算符替代CASE语句,写法更简洁,执行效率也更高,逻辑和你原本的需求完全一致:当roadside_bottom取值为King或Super King时,roadside_top_bottom必须为空。
修正后的完整建表代码如下:

create table dbo.Advertisement
(
    advertisement_id int NOT NULL PRIMARY KEY,
    roadside_bottom varchar (20),
    roadside_top_bottom varchar (20),
    curbside varchar (20),
    rearside varchar (20),
    headliner varchar(10),
    bus varchar (10),
    CONSTRAINT bottom_pass 
        CHECK( 
            roadside_bottom NOT IN ('King', 'Super King') 
            OR roadside_top_bottom IS NULL 
        )
);

如果你一定要保留CASE的写法,只需要给CASE语句增加等于判断、补全ELSE分支即可,示例如下:

CONSTRAINT bottom_pass 
    CHECK(
        CASE 
            WHEN roadside_bottom = 'King' AND roadside_top_bottom IS NULL THEN 1 
            WHEN roadside_bottom = 'Super King' and roadside_top_bottom IS NULL THEN 1 
            ELSE 0
        END = 1
    )

内容的提问来源于stack exchange,提问作者LongLouis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:27:04