2010-03-10 39 views
2

如果我嘗試運行在SQL Server 2005中的查詢:調試複雜時1和0的T-SQL無法識別爲布爾常量

Msg 4145, Level 15, State 1, Line 1 An expression of non-boolean type specified in a context where a condition is expected, near ')'.

有時:

SELECT 1 WHERE NOT (0) 

我得到這個錯誤在WHERE語句中,我將刪除部分內容並通過插入諸如1=1之類的內容來測試特定場景。我寧願只使用1TRUE,但這在上述情況下不起作用。爲什麼它不能評估NOT(0)作爲布爾表達式?

編輯:這確實做工精細,可見我沒有增加一列:

SELECT 1 WHERE NOT(1<>1)

+0

'Select 1'在SQL Server中可用。不需要'where'條件。 – LukLed 2010-03-10 18:26:19

+0

@LukLed這與錯誤無關。錯誤是指哪裏的條件。爲了簡單起見,我使用了「SELECT 1」。 – AaronLS 2010-03-10 18:40:40

回答

5

0和1的整數什麼。它們本身不是布爾表達式,而在SQL中,只有表達式的值可以是TRUE,FALSE或UNKNOWN。例如說「NOT 7.5」本身不是一個布爾表達式。實際上,你想說「NOT(7.5 <> 0)」因此,在你的榜樣,你需要你的價值轉換爲表達式:

Select 1 Where Not (0 <> 0) 

在T-SQL至少有沒有常量可以用於TRUE和FALSE。也就是說,有沒有辦法查詢:

Select 1 Where Not TRUE 
+0

謝謝托馬斯,你明白我的問題。所以我想有沒有布爾常量可以代替「0」0? – AaronLS 2010-03-10 18:07:14

+0

我從來沒有這樣的需求,但看到有人使用「WHERE 1 = 1」和「WHERE 1 = 0」。這些給你很好的布爾條件沒有雙重和三重否定。 – 2010-03-10 18:07:49

+0

@aaronls。在T-SQL中,至少沒有。沒有TRUE和FALSE的常量。您只需接受任何布爾表達式都可以以TRUE,FALSE或UNKNOWN結尾。 – Thomas 2010-03-10 18:09:09

0

因爲WHERE子句是在SELECT子句分開

你完全可以選擇在選擇不同的東西,甚至沒有在WHERE子句

例如

select name, address, state, company, country 
from bla 
where occupation='programmer' 
and hobby ='debugging' 

所以這裏沒有(0)將意味着在這種情況下,您需要添加列

AND RegionID <> 0 

AND RegionID NOT IN (0) --althoug if you have NULLS in coumn this won't work 
+0

我調整我可以從哪裏選擇不同的東西。我不關心選擇方。我正在討論生成錯誤的WHERE方面的布爾表達式。這是一個沒有列的布爾表達式。爲什麼我必須添加一列? – AaronLS 2010-03-10 18:03:05

0
SELECT 1 WHERE NOT (0) 

在哪裏clasue你必須有一個比較,哪裏還有什麼=什麼,哪裏還有什麼<>什麼等等。你不能有一個比較只有一個值。它需要知道你試圖比較0到。

相關問題