2014-09-19 115 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) = '' 

这应该工作