在TSQL中传递一个变量
问题描述:
我有下面的代码,我想循环遍历一个表并设置一个变量,然后可以用来更新另一个表中的字段,但是当我尝试读取时,变量始终显示为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
答
@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
有一个机会,\ @ DateTime1或\ @CustId或\ @ CustID1是空,因此尝试使用ISNULL(\ @ DateTime1,GETDATE( ))等等。 –
我认为你可以把你的代码改写成单个语句,更新批量 –
看看[这里](http://*.com/questions/194852/concatenate-many-rows-into-a-单个文本字符串),用于从多行数据构建字符串而不使用[RBAR]的一些方法(https://www.simple-talk.com/sql/t-sql-programming/rbar-row- by-agonizing-row /)循环。 – HABO