首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL -在这种情况下不使用游标需要一些帮助。

SQL -在这种情况下不使用游标需要一些帮助。
EN

Stack Overflow用户
提问于 2012-08-17 08:50:49
回答 2查看 172关注 0票数 0

目前,在我的存储过程中,我正在为下面的情况使用游标。我所知道的是我们需要尽量避免使用游标。

所以,我把这里的情况发给你,可以帮我解决这个问题。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2012-08-17 09:08:36

谁说你需要避免使用游标?

提供游标是有原因的,在某些情况下,您必须使用游标或使用某种编程语言获取记录和处理逻辑。

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-17 09:10:11

在高级别上,您可以这样做(我在表B中添加了一个insertDate,因为我认为更新是必要的)

首先,将tableA中的数据插入tableB:

代码语言:javascript
运行
复制
insert into tableB (ID, column1, column2, insertDate)
select ID, callFunction1(userID), callFunction2(userID), getdate()

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

代码语言:javascript
运行
复制
update tableA
set status=1 
where ID in (select ID from tableB where insertDate=today)

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

在你的情况下什么会导致失败?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12002674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档