Sql 内部回滚事务也回滚外部事务

Sql 内部回滚事务也回滚外部事务,sql,sql-server,tsql,sqlcmd,Sql,Sql Server,Tsql,Sqlcmd,我面临这样的问题。我有这个事务,$(FilePath)指定另一个脚本,它应该开始运行 BEGIN TRANSACTION :r $(FilePath) GO IF(@@ERROR <> 0) BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END 开始交易 :r$(文件路径) 去 如果(@@0错误) 开始 回滚事务 结束 其他的 开始 提交事务

我面临这样的问题。我有这个事务,$(FilePath)指定另一个脚本,它应该开始运行

BEGIN TRANSACTION
:r $(FilePath)
GO
IF(@@ERROR <> 0)
    BEGIN
        ROLLBACK TRANSACTION
    END
ELSE
    BEGIN
        COMMIT TRANSACTION
    END
开始交易
:r$(文件路径)
去
如果(@@0错误)
开始
回滚事务
结束
其他的
开始
提交事务
结束
(请注意,sqlcmd调用的脚本大部分不包含Transacion) 问题是,如果被调用的脚本包含回滚事务,那么它也会回滚外部事务。内部脚本不包含命名事务,而且有太多的脚本需要重写每个要命名的事务

是否有办法使此事务仅在相应的回滚事务运行时回滚


谢谢

请尝试在
回滚
语句中使用
保存点\u名称
,如所述:
如果没有此保存点,ROLLBACK语句将事务回滚到设计的最外层的
BEGIN TRANSACTION
语句

ROLLBACK { TRAN | TRANSACTION } 
     [ transaction_name | @tran_name_variable
     | savepoint_name | @savepoint_variable ] 
[ ; ]
回滚没有保存点名称或事务名称的事务 回滚到事务的开头。筑巢时 事务,该语句将所有内部事务回滚到 最外层的BEGIN事务语句。在这两种情况下,回滚 事务将@TRANCOUNT系统函数递减为0。回降 事务保存点\u名称未递减@@TRANCOUNT


尝试将
savepoint\u名称
与您的
ROLLBACK
语句一起使用,如所述:
如果没有此保存点,ROLLBACK语句将事务回滚到设计的最外层的
BEGIN TRANSACTION
语句

ROLLBACK { TRAN | TRANSACTION } 
     [ transaction_name | @tran_name_variable
     | savepoint_name | @savepoint_variable ] 
[ ; ]
回滚没有保存点名称或事务名称的事务 回滚到事务的开头。筑巢时 事务,该语句将所有内部事务回滚到 最外层的BEGIN事务语句。在这两种情况下,回滚 事务将@TRANCOUNT系统函数递减为0。回降 事务保存点\u名称未递减@@TRANCOUNT


将您的事务命名为@NickyvV writed。听起来您对正在运行的脚本的内容没有任何控制权-如果是这样,您就无能为力了。SQL Server不支持真正的嵌套事务。是的,在这种情况下,我不允许重写脚本,但我必须在事务中运行它们。请将您的事务命名为@NickyvV Write。听起来您对正在运行的脚本的内容没有任何控制权-如果是这样,您将无能为力。SQL Server不支持真正的嵌套事务。是的,在这种情况下,我不允许重写脚本,但我必须在事务中运行它们。谢谢,但这不起作用。问题是脚本中已经有编写的事务,这些事务没有命名,我不允许命名它们。即使我愿意,这仍然不是一个选项,因为大约有8-900个脚本。谢谢,但这不起作用。问题是脚本中已经有编写的事务,这些事务没有命名,我不允许命名它们。即使我愿意,这仍然不是一个选项,因为大约有8-900个脚本。