查询失败后使用 SELECT-INTO 语句部分提交

时间:2021-03-10 09:16:08

标签: sql-server

我正在测试连接丢失或超时时查询可能出现的问题。为了进行测试,我使用新连接运行查询,并在我终止程序或断开网络连接几秒钟后运行。然后我检查查询的影响。

我相信,如果一个查询,不在显式事务中,由于任何原因失败,将会回滚效果。当然,这对于 DELETE、INSERT、UPDATE 或 DDL 语句等操作也很有意义。数据库中的隐式事务处于关闭状态。

我的理论是正确的,除非我运行了 SELECT-INTO 语句。我尝试过的示例查询 -

SELECT * INTO test_table FROM audit

由于Socket读取超时而失败,但后来我发现即使没有插入记录,新表test_table也被创建为空。

浏览文档一段时间后,根据 official documentation,这是预期的行为。这是可以理解的。但对我来说问题是我无法真正重试此查询执行,因为该表已存在。

我想要解决这个问题,我需要使用围绕此类语句的显式事务。

帮助我使用该功能 - 我的方法正确吗?是否还有其他 SQL 语句会导致类似行为?

提前致谢。

编辑: 既然我得到了如何解决这个问题的建议,我现在想知道是否还有其他 SQL 语句会导致类似的行为。

0 个答案:

没有答案