应用与SQL Server连接中断后,查询能否继续执行?
SQL Server连接中断后查询执行状态说明
已发起查询的运行逻辑
当.NET应用与SQL Server的连接因应用服务器崩溃等意外中断时,已经在SQL Server上启动的查询不会立即终止。SQL Server不会主动实时检测客户端连接状态,只有当它尝试向客户端返回执行结果、需要接收客户端输入,或是完成查询后尝试释放连接资源时,才会发现连接已断开,此时才会终止相关查询进程。
举个实际场景:假设你提交了一个耗时10分钟的全表统计查询,应用服务器在查询执行到第3分钟时崩溃,SQL Server会继续完成这个查询的执行,直到它尝试把统计结果发送给客户端,才会察觉到连接失效,随后清理该查询的相关资源。
非事务性多语句脚本的执行结果
对于非事务性的多语句脚本,执行规则如下:
- 脚本中已经执行完成的语句,其对数据库的修改会永久生效(因为没有事务包裹,不会触发回滚);
- 脚本中正在执行的语句会继续执行完毕,直到SQL Server尝试与客户端交互时发现连接断开;
- 尚未开始执行的后续语句会直接终止,不会被执行。
举个示例:
-- 非事务性脚本 UPDATE Users SET LastLogin = GETDATE() WHERE ID = 100; INSERT INTO Logs (Action, UserID) VALUES ('Login', 100);
如果第一条UPDATE语句已经执行完成,此时连接突然中断,那么Users表的修改会被保留,第二条INSERT语句则不会被执行。
内容的提问来源于stack exchange,提问作者SQL_Guy
相关产品推荐
相关产品推荐

