我想用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
答案 0 :(得分:2)
由于@concat
未初始化,因此默认值为null
。将值与null
连接会产生null
,因此循环不会取得任何进展。将其初始化为空字符串:
declare @Concat as NVarChar(max) = N'';
将解决问题。
提示:Char
,VarChar
,NChar
或NVarChar
的默认长度通常是一个字符。如果它是Cast
或Convert
的目标类型,则为30个字符。最佳实践:始终指定长度。