0

目前,在我的存储过程中,我将光标用于以下情况。我所知道的是我们需要尽可能避免使用游标。

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

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

对于第 2 - 5 步的业务,我们如何使用光标创建存储过程?

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

4

2 回答 2

1

谁说你需要避免使用游标?
提供游标是有原因的,在某些情况下,您必须使用游标或求助于获取记录并以某种编程语言处理逻辑。

如果您希望每条记录成功或失败,在数据库中甚至在存储过程中,您都需要一个游标。(是的,触发器后有插入,但这只会使您的逻辑复杂化)

于 2012-08-17T09:08:36.453 回答
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)

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

究竟什么会导致您的案例失败?

于 2012-08-17T09:10:11.587 回答