如何在update语句中使用存储过程的输出参数?

时间:2014-10-06 17:00:50

标签: sql sql-server-2008-r2

 update rd 
 set rd.Identifier = isnull(rd.Identifier1,exec DBName.dbo.GenerateUniqueIdSP  @UniqueId OUTPUT)
 from [Try]..RawData rd with (nolock) where rd.Id in (1,2,3,4,5,6,7,8,9)

在上面的代码中,我需要使用新生成的Identifier更新UniqueId列,但我不应该使用变量来保存输出值,因为我必须批量更新多行。

我在上面的代码中收到错误。

需要改变什么?

1 个答案:

答案 0 :(得分:0)

最好将stored procedure更改为function 或者您需要使用CURSOR并在游标循环内进行更新。

使用函数,您的更新语句如下所示

 update rd 
 set rd.Identifier = dbo.GenerateUniqueIdFn()
 from [Try]..RawData rd  
 where rd.Id in (1,2,3,4,5,6,7,8,9) and
 rd.Identifier1 is NULL

用光标看起来像这样

DECLARE updateIdentCur CURSOR FOR
select rd.Id from [Try]..RawData rd  
where rd.Id in (1,2,3,4,5,6,7,8,9) and
rd.Identifier1 is NULL


OPEN updateIdentCur 
    FETCH NEXT FROM updateIdentCur into @rId

WHILE @@FETCH_STATUS = 0
begin
    exec DBName.dbo.GenerateUniqueIdSP  @UniqueId OUTPUT
    UPDATE set rd.Identifier = @UniqueId
    Where rd.Id = @rId
    FETCH NEXT FROM updateIdentCur into @rId
end

close  updateIdentCur 
deallocate  updateIdentCur