случай в случае, когда предложение вызывает ошибку: выражение не-логического типа, указанное в контексте, где ожидается условие, рядом с ')' - PullRequest
2 голосов
/ 15 марта 2019

Я получаю следующее сообщение об ошибке при компиляции запроса:

Ошибка: выражение не булева типа, указанное в контексте, где ожидается условие, рядом с ')'.

Запрос:

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 Ответ

3 голосов
/ 15 марта 2019

Просто добавьте = 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 нет неявного преобразования числа в логическое значение, поэтому его нужно преобразовать самостоятельно.

SQL Fiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...