目前,在我的存储过程中,我正在使用Cursor来实现下面的情况。我所知道的是我们需要尽可能避免使用游标。
所以,我在这里发布的情况可以帮助我解决它。
对于步骤2 - 5中的业务,我们如何使用Cursor创建存储过程?
我希望你能给我建议解决这个问题。
答案 0 :(得分:1)
谁说你需要避免使用游标? 提供游标是有原因的,在某些情况下,您必须使用游标或手段来获取记录并使用某种编程语言处理逻辑。
如果要在每个记录成功或失败的情况下,即使在存储过程内也要在数据库中,您将需要一个游标。 (是的,有触发后插入,但这只会使你的逻辑复杂化)
答案 1 :(得分:1)
在高级别上你可以做这样的事情(我在表B中添加了一个insertDate,因为我认为有必要进行更新)
首先,将tableA中的数据插入tableB:
insert into tableB (ID, column1, column2, insertDate)
select ID, callFunction1(userID), callFunction2(userID), getdate()
然后对于插入的记录,设置status = 1
update tableA
set status=1
where ID in (select ID from tableB where insertDate=today)
现在,返回消息种类有点复杂,你不能每行返回一条消息,如果其中任何一个“失败”,整个批处理将失败。
究竟会导致你的案件失败的原因是什么?