2015-07-21 4 views
1

У меня есть код ниже, и я хочу перебрать таблицу и установить переменную, которая затем может быть использована для обновления поля в другой таблице, но переменная продолжает отображаться как NULL, когда я пытаюсь читать Это. Что я делаю не так?Передача переменной в TSQL

declare @CustId nchar(15) 
declare @CustID1 nchar(255) 
declare @DateTime1 nchar(25) 
declare @finalnote varchar(max) 
declare @RowNum int 

declare CustList cursor for 
    select 
     DateTime, Username, Notes 
    from tbl_DesignNotes 
    where OrderNumber = 10645 
    order by ID 

OPEN CustList 

FETCH NEXT FROM CustList INTO @DateTime1, @CustId, @CustID1 
set @RowNum = 0 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @RowNum = @RowNum + 1 
    set @finalnote = @finalnote + ' ' + @DateTime1 + ' ' + @CustId + ' ' + @CustID1; 
    --select @finalnote 
    --print @finalnote 
    select @finalnote as varText; 

    --print @DateTime1 + ' ' + @CustId + ' ' + @CustID1 
    FETCH NEXT FROM CustList INTO @DateTime1, @CustId, @CustID1 
END 

CLOSE CustList 
DEALLOCATE CustList 
+1

Там есть шанс, что \ @ DateTime1 или \ @CustId или \ @ CustID1 является недействительным, так попытайтесь использовать ISNULL (\ @ DateTime1, GETDATE ()) и т. д. –

+3

Я думаю, что вы можете переписать свой код в один оператор, обновить объем –

+0

Посмотрите [здесь] (http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a- однотекстовая строка) для некоторых методов построения строки из данных в несколько строк без использования [RBAR] (https://www.simple-talk.com/sql/t-sql-programming/rbar--row- by-agonizing-row /). – HABO

ответ

3

@finalnote не инициализирован, поэтому он должен быть NULL, прежде чем он войдет в цикл. Конкатенация ничего с NULL будет (обычно *) приводят к NULL, так

set @finalnote = @finalnote + ' ' + @DateTime1 + ' ' + @CustId + ' ' + @CustID1; 

всегда будет приводить к NULL, независимо от того, что @ DateTime1, @CustId и @ CustID1 содержат.

Попробуйте инициализировать его до пустой строки перед входом в цикл. например:

declare @finalnote varchar(max) = '' 

Примечание *: подробнее см: https://msdn.microsoft.com/en-us/library/ms176056%28v=sql.110%29.aspx

+0

Работал как очарование. Мой герой!!!! Благодарю. – Keith

Смежные вопросы