首页 > 解决方案 > 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
                    )

标签: sqlsql-servercase

解决方案


只需在's close= 1后面加上。CASEEND

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 中没有从数字到逻辑值的隐式转换,因此您必须自己进行转换。

SQL 小提琴


推荐阅读