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



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

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

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

对于步骤 2 - 5 中的业务,如何使用 Cursor 创建存储过程?

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

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

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

高级别上,您可以做这样的事情(我在表 B 中添加了一个插入日期,因为我认为有必要进行更新)

首先,将数据从表 A 插入表 B 中:

insert into tableB (ID, column1, column2, insertDate)
select ID, callFunction1(userID), callFunction2(userID), getdate()

然后对于插入的记录,设置状态=1

update tableA
set status=1 
where ID in (select ID from tableB where insertDate=today)

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

在您的案例中,究竟是什么会导致失败?

相关内容

最新更新