下面的代码不起作用,有什么想法吗?
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 :(得分: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。