2009-03-05 9 views
2

Le soufflet de lecture ne fonctionne pas, aucune idée pourquoi?La concaténation de chaîne TSQL ne fonctionne pas dans la boucle WHILE?

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

Définir "ne fonctionne pas" Ce qui crache. Que devrait-il cracher? – TheTXI

Répondre

7

Voir MSDN: + (String Concatenation) (Transact-SQL):

Tout comme les opérations arithmétiques que sont effectuées sur des valeurs nulles, lorsqu'une valeur NULL est ajoutée à une valeur connue le résultat est généralement une valeur inconnue, une chaîne de concaténation opération qui est effectuée avec une valeur nulle doit également produire un résultat null .

Donc, pour faire avancer les choses fonctionnent, il est une bonne pratique pour initier les variables varchar immédiatement après DECLARE

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

Autre façon de gérer problème concat NULL (au cas où vous ne savez pas si la valeur est NULL ou non) - ISNULL ou COALESCE:

SET @ConcText = ISNULL(@ConcText, '') + N' counter,' 
SET @ConcText = COALESCE(@ConcText, '') + N' counter,' 
4

vous ne définissez pas @ConcText à quoi que ce soit au début, donc lorsque vous concaténer quoi que ce soit vous obtenez NULL NULL.

Questions connexes