Конкатенация строк TSQL не работает в цикле WHILE? - PullRequest
2 голосов
/ 05 марта 2009

Код ниже не работает, есть идеи, почему?

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  ??

Ответы [ 2 ]

7 голосов
/ 05 марта 2009

См. MSDN: + (Конкатенация строк) (Transact-SQL) :

Так же, как арифметические операции, которые выполняются с нулевыми значениями, когда нулевое значение добавляется к известному значению результат обычно неизвестен значение, конкатенация строк операция, которая выполняется с нулевое значение также должно давать нулевое значение результат.

Таким образом, чтобы все заработало, рекомендуется инициировать переменные varchar сразу после объявления:

DECLARE @ConcText NVARCHAR(1000)
SET @ConcText  = ''

Другой способ решения проблемы concat NULL (если вы не знаете, является ли значение NULL или нет) - ISNULL или COALESCE:

SET @ConcText = ISNULL(@ConcText, '') + N' counter,'
SET @ConcText = COALESCE(@ConcText, '') + N' counter,'
4 голосов
/ 05 марта 2009

Вы не устанавливаете @ConcText для чего-либо в начале, поэтому, когда вы объединяете что-либо в NULL, вы получаете NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...