TSQL字符串连接在WHILE循环中不起作用?

时间:2009-03-05 14:48:05

标签: tsql string

下面的代码不起作用,有什么想法吗?

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  ??

2 个答案:

答案 0 :(得分:7)

请参阅MSDN: + (String Concatenation) (Transact-SQL)

  

就像算术运算一样   当a时,对空值执行   将null值添加到已知值   结果通常是未知的   值,字符串连接   用a执行的操作   null值也应该产生null   结果

为了让事情顺利进行,在声明后立即启动varchar变量是一个很好的做法:

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

处理NULL concat问题的其他方法(如果你不知道值是否为NULL) - ISNULL或COALESCE:

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

答案 1 :(得分:4)

您没有在开始时将@ConcText设置为任何内容,因此当您将任何内容连接到NULL时,您将获得NULL。