2009-03-05 51 views
2

代碼波紋管不工作,有什麼想法爲什麼?TSQL字符串串聯在WHILE循環中不工作?

declare @Counter int 
set @Counter = 0 
declare @ConcText nvarchar(1000) 

while @Counter < 5 
begin 
    --set @ConcText = @ConcText + cast(@Counter as nvarchar(10)) + N' counter,' 
    --set @ConcText = @ConcText + convert(nvarchar(10), @Counter) + N' counter,' 
    set @ConcText = @ConcText + N' counter,' 
    set @Counter = @Counter + 1 
end 
print @ConcText --<-- this is null, why ?? 
+0

定義「不工作」什麼是吐出來。它應該吐出什麼? – TheTXI 2009-03-05 14:51:10

回答

7

參見MSDN: + (String Concatenation) (Transact-SQL)

就像算術運算 是在空值進行的,當一個 空值被添加到一個已知的值 結果通常是未知 值,一個字符串連接 使用 空值執行的操作也應產生空值 結果。

因此,要獲得工作上的事情,這是申報後啓動VARCHAR變量立刻一個很好的做法:

DECLARE @ConcText NVARCHAR(1000) 
SET @ConcText = '' 

其他的方式來處理NULL CONCAT問題(如果你不知道,如果值爲NULL或者沒有) - ISNULL或COALESCE:

SET @ConcText = ISNULL(@ConcText, '') + N' counter,' 
SET @ConcText = COALESCE(@ConcText, '') + N' counter,' 
4

你是不是在開始設置@ConcText任何東西,所以當您連接任何爲NULL你NULL。