2012-03-30 160 views
0
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和或者

在指定的上下文非布爾類型,其中一個條件的預期,附近「)」的一種表現。

這條語句有什麼問題?

+0

解決辦法是 - > 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

回答

0

看看你在子句中的case語句,case語句不會與任何值進行比較。

我會建議將您的case語句移入select語句,或者確保您有一個值來比較case語句。

即:

declare @Changed nvarchar(50) = 'Changed' 
在where子句

@Changed = (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END)) 
+0

在我的SELECT語句中,我將這個CASE比較保存在另一列中。語句是SELECT T1。*,CASE WHEN T1.C4 <> T2.C4 THEN'已更改'END C10 FROM T1 .. WHERE條件..動機是 - >我必須做這個比較,並保存比較'更改' – 2012-03-30 09:30:22

+0

明白了。生病編寫爲AND(CASE當T1.C4 <> T2.C4 THEN 1 END)= 1我想應該解決它。 – 2012-03-30 09:33:52

+0

@rahul shukla這確實是我的意思,你必須將它與某些東西進行比較。 – Lex 2012-03-30 09:35:21

4

這可能是原因:

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

你正在做的東西,可以返回Changed,這不是一個布爾值AND

+0

thats dumb !我從我的查詢中的select語句中盲目複製它。謝謝! – 2012-03-30 09:23:50