SQL Server 2005和或者
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))
这是给我的错误 - >SQL Server 2005和或者
在指定的上下文非布尔类型,其中一个条件的预期,附近“)”的一种表现。
这条语句有什么问题?
看看你在子句中的case语句,case语句不会与任何值进行比较。
我会建议将您的case语句移入select语句,或者确保您有一个值来比较case语句。
即:
declare @Changed nvarchar(50) = 'Changed'
在where子句
:
@Changed = (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END))
在我的SELECT语句中,我将这个CASE比较保存在另一列中。语句是SELECT T1。*,CASE WHEN T1.C4 T2.C4 THEN'已更改'END C10 FROM T1 .. WHERE条件..动机是 - >我必须做这个比较,并保存比较'更改' – 2012-03-30 09:30:22
明白了。生病编写为AND(CASE当T1.C4 T2.C4 THEN 1 END)= 1我想应该解决它。 – 2012-03-30 09:33:52
@rahul shukla这确实是我的意思,你必须将它与某些东西进行比较。 – Lex 2012-03-30 09:35:21
这可能是原因:
And (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END))
你正在做的东西,可以返回Changed
,这不是一个布尔值AND
。
thats dumb !我从我的查询中的select语句中盲目复制它。谢谢! – 2012-03-30 09:23:50
解决办法是 - > SELECT * FROM T1 INNER JOIN T2 ON T1.C1 = T2.C1 WHERE ((T1 (T1.C5-T2.C5≠0) (T1.C4-T2.C4 THEN 1 END)= 1) 或 (T1.C5-T2.C5≠0) .C6-T2.C6 0)) – 2012-03-30 09:36:26