如果我对SQL执行一个脚本,其中包含多个事务,但是在中途断开连接,SQL会做什么?它是运行脚本完成,还是只回滚它当前所处的事务(或完成它)?
答案 0 :(得分:3)
当SQL Server检测到连接断开时,它应该回滚任何当前事务并中止当前批处理 1 。
任何先前提交的交易仍将被提交。
1 在这里,我试图区分脚本和批次。许多客户端工具支持包含多个批处理(由GO
分隔)的脚本及其按顺序提交到SQL Server的批处理。
答案 1 :(得分:0)
只会执行已提交的交易。
其他人会做回滚。
答案 2 :(得分:0)
嗯,取决于,如果脚本SQL中有多个事务,您是否将提交放入每个事务中?例如,如果您的脚本像这样
BEGIN TRAN --Transaction 1
INSERT TableA VALUES(value1,value2)
COMMIT TRAN
BEGIN TRAN --Transaction 2
INSERT TableB VALUES(value1,value2)
COMMIT TRAN
如果你的sql server断开连接,整个脚本执行的中途,但是在执行脚本的过程中,sql server已经完成了事务1,并且已经提交了,那么事务1已经完成了,你可以看到tableA上的结果,但是当sql server运行事务2时,不久之后事务2尚未完成且连接断开,事务2将被回滚,所以你无法在TableB上看到结果