sql - where 子句中的 case 导致错误:在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')'
问题描述
编译查询时收到以下错误消息:
错误:在预期条件的上下文中指定的非布尔类型表达式,靠近“)”。
询问:
Select * from EPLMethods SP WHERE EPLMEthodId=@EplMethodId
AND
(
CASE WHEN (ISNULL(SP.Data.value('(/*/subject)[1]', 'bit'), 0)= 1 AND ISNULL(SP.Data.value('(/*/answers)[1]', 'nvarchar(max)'), '') = '')
THEN 1
ELSE
Case WHEN (SELECT COUNT (*) FROM dbo.GetEPLData3(@EplMethodId, 1, SP.Data.value('(/*/Answers/AnswersList/Entry[@key="number"]/value)[1]', 'nvarchar(max)')))> 0 Then
1
ELSE
0
END
END
)
解决方案
只需在's close= 1
后面加上。CASE
END
Select * from EPLMethods SP WHERE EPLMEthodId=@EplMethodId
AND
(
CASE WHEN (ISNULL(SP.Data.value('(/*/subject)[1]', 'bit'), 0)= 1 AND ISNULL(SP.Data.value('(/*/answers)[1]', 'nvarchar(max)'), '') = '')
THEN 1
ELSE
Case WHEN (SELECT COUNT (*) FROM dbo.GetEPLData3(@EplMethodId, 1, SP.Data.value('(/*/Answers/AnswersList/Entry[@key="number"]/value)[1]', 'nvarchar(max)')))> 0 Then
1
ELSE
0
END
END
= 1
)
如错误所述,您尝试使用 SQL Server 需要布尔值的数字 - 与其他一些语言不同,SQL Server 中没有从数字到逻辑值的隐式转换,因此您必须自己进行转换。
推荐阅读
- java - Spring RestTemplate - 获取 java.io.EOFException:null 并在执行简单 GET 请求时解析 HTTP 请求标头时出错
- hadoop - 无法找到或加载主类“名称” - hadoop(windows)
- ios - 二元运算符“<^>”不能应用于类型的操作数
- linux - 在循环中运行对话框
- laravel-6 - Laravel Nova 错误基表或未找到视图
- python - Python 排序函数如何适用于案例:另一个列表中的列表
- mongodb - 在 MongoDB 的聚合管道中使用阶段之间的投影是否有内存性能优势?
- android - 如何在 android 中使用 Poppins 超粗体可下载字体
- c# - 在功能方面,此代码的分配有什么不同吗?
- ruby-on-rails - Sidekiq“默认”队列在第一个作业完成之前不会运行下一个作业