mee*_*eep 5 t-sql sql-server stored-procedures
我有一个存储过程本身按顺序调用其他存储过程的列表:
CREATE PROCEDURE [dbo].[prSuperProc]
AS
BEGIN
EXEC [dbo].[prProc1]
EXEC [dbo].[prProc2]
EXEC [dbo].[prProc3]
--etc
END
Run Code Online (Sandbox Code Playgroud)
但是,我的表中有时会产生一些奇怪的结果,由prProc2生成,这取决于prProc1生成的结果.如果我按顺序手动执行prProc1,prProc2,prProc3,那么一切都很好.看来,当我运行顶级过程时,在Proc1完成之前正在执行Proc2并将其结果提交给db.它并不总是出错,但是当Proc1有一个很长的执行时间(在这种情况下〜10s)时似乎出错了.
如何更改prSuperProc,以便每个过程仅在前面的过程完成并提交后才执行?交易?
编辑额外的细节:
我的数据库中有一个表,它有一个默认为null的列.prProc1在此表上执行一组更新语句以填充此列.然后,prProc2根据此列中的值将摘要数据插入到辅助表中.
当我运行超级过程时,我(有时)看到的是第一个表具有由prProc1正确计算的结果,但是prProc2已生成结果,就像列全部为空.如果我然后手动运行prProc2,则会正确生成摘要数据.
Proc2 不会在Proc1 之前运行:就这么简单。SQL 会一个接一个地执行,但绝不会乱序。
您可以使用TSQL_SPs 模板对此进行分析
例如,您是否正在运行 2 个包装程序执行?