2013-04-23 105 views
0

我有一個Microsoft SQL表tbl有如下記載:微軟SQL服務器上串2005查詢:< ''

clmn1 (smallint NOT NULL) = '2012' 
clmn2 (char (10) NOT NULL) = '620100' 
clmn3 (char (1) NOT NULL) = '' 

當我執行下面的查詢:

select * 
from tbl with (rowlock) 
where clmn1 = 2012 and clmn2 = '620100' and clmn3 <= ' ' 

然後上面行被發現,這是正確的。

但執行以下查詢時:

select * 
from tbl with (rowlock) 
where clmn1 = 2012 and clmn2 = '620100' and clmn3 < ' ' 

然後發現沒有什麼是不正常的。因爲clmn3是空的('')。 '' < ' ' = true

必須使用2 sql查詢的格式,因爲我們正在使用Xisam將他自己的sql查詢轉換爲上述sql查詢格式。

回答

7

CHAR(1)變成''' ' ......所以' '< ' '。如果要將空字符串視爲空字符串,請停止使用CHAR並使用VARCHAR

DECLARE @c CHAR(1); 
SET @c = ''; 
SELECT 'x' + @c + 'x'; 

結果:

x x -- not xx