如何在while循环中连接两个var

时间:2019-04-17 14:30:49

标签: tsql stored-procedures concatenation

我想用while循环构造一个“全部联盟”查询。

我已经尝试过+ =串联,但是不起作用。

DECLARE @cnt1 int , @concat nvarchar(max), @qry nvarchar(500);
SET @cnt1 = 1;
WHILE @cnt1 < 99 
BEGIN 
SET @qry = 'select name_' + CAST(@cnt1 AS CHAR) + ' , name2_' + CAST(@cnt1 AS CHAR) + ', m.state1 FROM table1 P left join table2 M on M.name = P.name_' + CAST(@cnt1 AS CHAR) + ' where p.nb > 1'; 
SET @cnt1 = @cnt1 + 1; 
SET @concat += ' UNION ALL ' + @qry 
END 
EXEC sp_executesql @concat 

@concat在循环结束时仍然为空...

谢谢vm

1 个答案:

答案 0 :(得分:2)

由于@concat未初始化,因此默认值为null。将值与null连接会产生null,因此循环不会取得任何进展。将其初始化为空字符串:

declare @Concat as NVarChar(max) = N'';

将解决问题。

提示:CharVarCharNCharNVarChar的默认长度通常是一个字符。如果它是CastConvert的目标类型,则为30个字符。最佳实践:始终指定长度。