在TSQL中传递变量

时间:2015-07-21 23:54:01

标签: sql-server tsql

我有下面的代码,我想循环遍历一个表并设置一个变量,然后可以用它来更新另一个表中的字段,但是当我尝试读取它时,变量一直显示为NULL。我做错了什么?

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 个答案:

答案 0 :(得分:3)

@finalnote未初始化,因此在进入循环之前它为NULL。 用NULL连接任何东西都会(通常是*)导致NULL,所以

set @finalnote = @finalnote + ' ' + @DateTime1 + ' ' + @CustId + ' ' + @CustID1;
无论@ DateTime1,@ CustomerId和@CustID1包含什么,

总是会导致NULL。

因此在进入循环之前尝试将其初始化为空字符串。例如:

declare @finalnote varchar(max) = '' 

注意*:有关更多信息,请参阅: https://msdn.microsoft.com/en-us/library/ms176056%28v=sql.110%29.aspx