使用OR合并两列生成新列时出现SQL语法错误求助
解决SQL Server中用OR逻辑生成新列的语法错误
错误原因分析
- 逻辑或运算符使用错误:你用了
||作为逻辑或,但在SQL Server中,||是字符串连接运算符,逻辑或必须用OR关键字,这是导致"Incorrect syntax near '|'"的直接原因。 - 布尔结果无法直接作为列返回: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
相关产品推荐
相关产品推荐

