SQL СЕРВЕР 2005 ИЛИ - PullRequest
       3

SQL СЕРВЕР 2005 ИЛИ

0 голосов
/ 30 марта 2012
SELECT *
FROM T1 INNER JOIN T2 ON T1.C1 = T2.C1
WHERE 
( (T1.C3-T2.C3<>0 ) 
And (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END) )
OR 
( (T1.C5-T2.C5<>0 )
And (T1.C6-T2.C6<>0) )

Это дает мне ошибку ->

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

Что не так с этим утверждением ??

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Это, вероятно, причина:

And (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END) )

Вы делаете AND для чего-то, что может вернуть Changed, что не является логическим значением.

0 голосов
/ 30 марта 2012

Если посмотреть на оператор Case в предложении were, оператор case не сравнивается ни с одним значением.

Я бы предложил перенести ваш оператор case в оператор select или убедиться, что у вас есть значение для сравнения с оператором case.

есть:

declare @Changed nvarchar(50) = 'Changed'

в предложении where:

@Changed = (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...