SQL - 在不使用游标的情况下需要一些帮助

时间:2012-08-17 08:50:50

标签: sql cursor

目前,在我的存储过程中,我正在使用Cursor来实现下面的情况。我所知道的是我们需要尽可能避免使用游标。

所以,我在这里发布的情况可以帮助我解决它。

  1. 在表A中,我使用Cursor来获取一个一个UserID
  2. 使用每个UserID,我调用2个函数来处理业务。结果是2个字符串。
  3. 这两个字符串将保存到表B.
  4. 如果成功,请执行2个操作:在表A中更新Status = 1.并返回消息。
  5. 如果失败,请执行1操作:返回消息。
  6. 循环光标
  7. 对于步骤2 - 5中的业务,我们如何使用Cursor创建存储过程?

    我希望你能给我建议解决这个问题。

2 个答案:

答案 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)

现在,返回消息种类有点复杂,你不能每行返回一条消息,如果其中任何一个“失败”,整个批处理将失败。

究竟会导致你的案件失败的原因是什么?