X 时间后自动回滚显式事务

Jam*_*oat 5 sql-server

是否可以在一定时间后让 SQL Server 自动回滚您的事务以避免引起的阻塞/锁定?过去我对此感到内疚,我从许多其他人那里听说这是一个常见的错误。

例如:我总是在执行删除/更新时使用这样的块。

BEGIN TRAN
--SQL Code Here
ROLLBACK TRAN
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

这让我看到多少行受到影响或执行上的数据选择,然后我可以注释掉ROLLBACK它会自动COMMITTRANSACTION

但是,有可能没有COMMIT突出显示/选择导致事务挂起的问题。我正在寻找的是一个设置,例如:

BEGIN TRAN 15 Seconds
--SQL Code Here
ROLLBACK TRAN
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)

这只会使交易最多保持 15 秒的打开状态。

如果这是不可能的,有没有人有更好的工作流程?

Tar*_*zer 4

您可以创建一个作业来检查打开的事务,如果它们已经打开一段时间并导致阻塞,则将其终止。但你必须小心这一点,因为你可能会有一笔大型的、必要的交易需要一段时间,而你不想被杀死。想象一下,回滚在标准版上运行了一个小时的索引重建。

您可以使用sp_WhoIsActive查找导致阻塞的打开事务,但这需要一些工作。

但我建议您不要这样做,而是认真处理 Management Studio 中的事务。当我完成交易时,我曾经启动过的任何窗口都会关闭。如果其中仍然有一个打开的事务,SSMS 会警告我,以便我可以提交/回滚。