【发布时间】:2020-02-24 13:36:27
【问题描述】:
我正在使用嵌套存储过程。开始事务和提交/回滚语句位于外部 SP 中。我可以将在嵌套 SP 中发生的所有数据库操作都提交到外部 SP 中吗?目前看来,它不像这样工作。是否有任何交易配置允许这样做?
ALTER procedure [dbo].[OuterStoredProcedure]
as
begin
declare @nRC int
SET NOCOUNT ON
begin transaction
execute @nRC=InnerStoredProcedure /*includes update statements*/
if (@nRC <> 1)
rollback transaction
else
commit transaction
end
【问题讨论】:
-
向我们展示您的代码。如果您在事务中执行 SP,并且回滚,那么是的,这些 SP 的“操作”将被回滚。如果它没有按您的预期工作,那么您的交易声明似乎是错误的。
-
@Larnu,请看上面的代码
-
那么这里有什么问题呢?关于立场:“如果您在事务中执行 SP,并且回滚,那么是的,这些 SP 的“操作”将被回滚。” 也许问题在于您有
@nRC <> 1? SP 返回0表示成功,而不是1。 -
@Larnu,假设它返回 1 表示成功。主要问题是为什么不能将外部过程中的提交应用于内部过程中的更新语句?我想当我们调用另一个过程时,会启动一些内部事务,我们不能在多个嵌套存储过程中使用相同的事务。
标签: tsql stored-procedures transactions commit