SQL-在不使用游标的情况下需要一些帮助吗
目前,在我的存储过程中,我正在使用光标处理以下情况。我所知道的是我们需要尽可能避免使用游标 所以,我把情况发到这里,你可以帮我解决它SQL-在不使用游标的情况下需要一些帮助吗,sql,cursor,Sql,Cursor,目前,在我的存储过程中,我正在使用光标处理以下情况。我所知道的是我们需要尽可能避免使用游标 所以,我把情况发到这里,你可以帮我解决它 在表A中,我使用游标逐个获取用户ID 对于每个用户ID,我调用2个函数来处理业务。结果是2个字符串 这两个字符串将保存到表B中 如果成功,则执行两个操作:更新表A中的状态=1,并返回一条消息 如果失败,执行1个操作:返回消息 循环光标 对于步骤2-5中的业务,我们如何使用游标创建存储过程 我希望你能给我一些建议来解决这个问题。谁说你需要避免使用游标? 提供游标是有
我希望你能给我一些建议来解决这个问题。谁说你需要避免使用游标?
提供游标是有原因的,在某些情况下,您必须使用游标或使用某种编程语言获取记录并处理逻辑
如果希望在数据库中,甚至在存储过程中,每个记录都成功或失败,则需要一个游标。(是的,有insert after触发器,但这会使您的逻辑复杂化)在较高的级别上,您可以执行类似的操作(我在表B中添加了insertDate,因为我认为更新是必要的) 首先,将表A中的数据插入表B:
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)
现在,返回消息的种类有点复杂,您不能每行返回一条消息,如果其中任何一条消息“失败”,整个批将失败
在您的案例中,什么会导致故障?您使用的是哪种DBMS?Sql Server?第(4)项中的“如果成功”是什么意思?请包括您当前使用的代码。迭戈:是的,是Sql Server 2008。Grisha:“如果成功”是指成功保存到表B中的那两个字符串。戴姆斯:如果可能的话,我只想找到一个解决方案。事实上,我的存储过程非常长且复杂。谢谢大家的回复。好吧,从你的伪代码看来,你从来没有使用过一次以上的循环迭代-步骤4-5在任何情况下都会退出循环…是的,你的解决方案对我参考非常有帮助。我将尝试在存储过程中应用它。谢谢你的帮助。目前,我的表有大约10.000.000条记录。如果我将游标用于业务,此表将锁定,没有人可以使用它。所以,我问这个问题是为了寻找一些解决方法。谢谢