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

使用OR合并两列生成新列时出现SQL语法错误求助

解决SQL Server中用OR逻辑生成新列的语法错误

错误原因分析

  1. 逻辑或运算符使用错误:你用了||作为逻辑或,但在SQL Server中,||是字符串连接运算符,逻辑或必须用OR关键字,这是导致"Incorrect syntax near '|'"的直接原因。
  2. 布尔结果无法直接作为列返回:SQL Server不支持直接将布尔表达式(比如c.Prices = 1 OR ...)作为列值返回,必须将逻辑判断结果转换为bit或int等可存储的数据类型,这是最后那段查询出现"Incorrect syntax near '='"的原因。

正确写法示例

方法1:使用CASE语句转换结果

SELECT 
    CASE 
        WHEN c.Prices = 1 OR CHARINDEX('COD', cr.CRTermDesc) > 0 THEN 1 
        ELSE 0 
    END AS showPrices
FROM Order1 i
INNER JOIN Cust c ON i.CustId = c.ID
INNER JOIN CRTerm cr ON c.CRTerm = cr.ID 
WHERE i.ID = 1

方法2:使用CAST将布尔表达式转为bit类型

SELECT 
    CAST((c.Prices = 1 OR CHARINDEX('COD', cr.CRTermDesc) > 0) AS bit) AS showPrices
FROM Order1 i
INNER JOIN Cust c ON i.CustId = c.ID
INNER JOIN CRTerm cr ON c.CRTerm = cr.ID 
WHERE i.ID = 1

结果验证

根据你提供的测试数据:

  • Cust表中Prices为0,关联的CRTermDesc是XYZ,CHARINDEX('COD', 'XYZ')返回0,所以showPrices结果为0。
  • 若将Cust的CRTerm改为1(对应COD),或Prices改为1,showPrices结果会变为1,符合OR逻辑的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:32:49