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
列,但我不应该使用变量来保存输出值,因为我必须批量更新多行。
我在上面的代码中收到错误。
需要改变什么?
答案 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