2009-03-05 4 views
2

Code unten funktioniert nicht, irgendwelche Ideen warum?TSQL-String-Verkettung funktioniert nicht in WHILE-Schleife?

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

Definieren Sie "nicht funktioniert" Was ist spuckt aus. Was sollte es ausspucken? – TheTXI

Antwort

7

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

Genau wie arithmetische Operationen, die auf Nullwerte durchgeführt werden, wenn ein Nullwert auf einen bekannten Wert das Ergebnis hinzugefügt wird, ist in der Regel ein unbekannter Wert ein String-Verkettung Operation, die mit einem Nullwert durchgeführt wird, sollte auch ein Null Ergebnis erzeugen.

So Dinge zu bekommen arbeiten, ist es eine gute Praxis, varchar Variablen sofort nach declare einzuleiten:

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

Anderer Art und Weise NULL concat Problem zu behandeln (falls Sie nicht wissen, wenn der Wert NULL ist oder nicht) - ISNULL oder COALESCE:

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

Sie sind nicht am Start etwas Einstellung @ConcText also, wenn Sie etwas verketten auf NULL Sie NULL erhalten.