在执行中途断开与 SQL 服务器的连接

Breaking a connection to SQL Server halfway through an execution

如果我针对 SQL 执行脚本,其中包含多个事务,但在中途断开连接,SQL 会做什么?它是 运行 脚本完成,还是只是回滚它当前所在的事务(或完成它)?

当SQL服务器检测到连接断开时,它应该回滚任何当前事务并中止当前批处理1.

任何先前已提交的事务仍将被提交。


1这里我试图区分 scriptsbatches。许多客户端工具支持包含多个批次(由 GOs 分隔)的脚本及其按顺序提交到 SQL 服务器的批次。

只会执行已提交的事务。

其他的会回滚。

嗯,取决于,如果脚本中有多个事务 SQL,您是否将提交放入每个事务中?例如,如果您的脚本是这样的

BEGIN TRAN --Transaction 1
    INSERT TableA VALUES(value1,value2)
COMMIT TRAN

BEGIN TRAN --Transaction 2
    INSERT TableB VALUES(value1,value2)
COMMIT TRAN

如果你的sql服务器断开连接,整个脚本执行到一半,但是在执行脚本的途中,sql服务器已经完成事务1,并且已提交,然后事务 1 已完成,您可以在表 A 上看到结果,但是当 sql 服务器 运行 事务 2 立即和片刻之后事务 2 尚未完成并且连接断开时,事务 2 将被回滚,因此您无法在 TableB

上看到结果