Как объединить две переменные в цикле - PullRequest
0 голосов
/ 17 апреля 2019

Я хотел бы создать запрос 'all all' с циклом 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 все еще пуст в конце цикла ...

Спасибо, ВМ

1 Ответ

2 голосов
/ 17 апреля 2019

Поскольку @concat не инициализирован, значением по умолчанию является null.Объединение значения с null приводит к null, поэтому в вашем цикле не происходит никакого прогресса.Инициализация его пустой строкой:

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

исправит проблему.

Совет: длина по умолчанию Char, VarChar, NChar или NVarChar равнаодин персонаж большую часть времени.Если это целевой тип Cast или Convert, тогда это 30 символов.Лучшая практика: всегда указывайте длину.

...