2014-09-19 116 views
2

爲什麼下面代碼中的@result值會打印出空白字符串?我希望它能和前面的結果連接起來。爲什麼這個TSql返回一個空值或空值?

DECLARE @size int 
DECLARE @string nvarchar(10) 
DECLARE @result nvarchar(10) 
SELECT @string = '12345abc123' 
DECLARE @count int, @total int 
SELECT 
    @total = LEN(@string), 
    @count = 1 

WHILE @count <= @total 
    BEGIN 
    SELECT @result = SUBSTRING(@string, @count, 1) + '-'+ @result 
    SELECT @count = @count + 1 
    PRINT @result 
    END 

回答

8

你永遠不會初始化@result,所以它默認爲SQL null。 SQL空值是會傳染的毒藥,所以當你

SELECT @result = .... + @result 

你實際上在做

SELECT @result = ... + null 

@result只是保持null

值初始化爲空字符串解決您的問題:

SET @result = '' 
3

它返回一個因爲您將子字符串與@result連接起來,最初爲NULL。

@result嘗試設置這樣的這樣的一個空字符串:

SELECT @string = '12345abc123', @result = '' 
3

你必須初始化變量@result

聲明像這樣

DECLARE @result nvarchar(10) = '' 

這應該工作