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

kru*_*rul 2 t-sql 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  ??
Run Code Online (Sandbox Code Playgroud)

Mak*_*tar 7

请参阅MSDN:+(字符串连接)(Transact-SQL):

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

因此,为了使事情有效,在声明之后立即启动varchar变量是一个好习惯:

DECLARE @ConcText NVARCHAR(1000)
SET @ConcText  = ''
Run Code Online (Sandbox Code Playgroud)

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

SET @ConcText = ISNULL(@ConcText, '') + N' counter,'
SET @ConcText = COALESCE(@ConcText, '') + N' counter,'
Run Code Online (Sandbox Code Playgroud)