【发布时间】:2014-06-17 12:20:55
【问题描述】:
我遇到了这样的问题。我有这个事务,并且 $(FilePath) 指定了另一个脚本,它应该开始运行。
BEGIN TRANSACTION
:r $(FilePath)
GO
IF(@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
(请注意,sqlcmd 调用的脚本大多不包含事务) 问题是,如果被调用的脚本包含回滚事务,那么它也会回滚外部事务。内部脚本不包含命名事务,并且要重写每个要命名的事务的脚本太多。
有没有办法让这个事务只在对应的回滚事务运行时才回滚?
谢谢
【问题讨论】:
-
像@NickyvV 写的那样命名你的交易。
-
听起来您无法控制正在运行的脚本的内容——如果是这种情况,您将无能为力。 SQL Server 不支持真正的嵌套事务。
-
是的,我不允许重写脚本,但我必须在事务中运行它们。
标签: sql sql-server tsql sqlcmd