SQL 开始事务但不提交

baa*_*h05 3 transactions sql-server-2008

如果我开始一个事务,但从未调用 COMMIT。数据会发生什么情况?我有一个较小的数据库(比如一百万个左右的 SKU)..我将其导出为 1024 的小偶数块..(第三方约束限制了我的文件大小)。
我必须标记已导出的记录..

例如。更新产品集导出 = 1,其中 sku = '1234';

现在每隔一段时间我都会遇到一个导致第三方文件写入工具崩溃的问题。但这发生在给定记录的文件创建之前。

所以我在想是否在更新记录之前调用开始事务,并仅在确认文件已构建后才提交。

这可能会导致一些没有其孪生的开始交易。

所以两个问题..有更好的方法吗?(除了摆脱有缺陷的第三方之外)或者作为从未提交的事务一部分的记录会发生什么?

gbn*_*gbn 5

您的事务将保持打开状态,直到连接完全关闭(而不仅仅是返回到连接池)。这不好

要在没有显式事务的情况下执行 UPDATE 并管理 1024 行块,请执行以下操作

UPDATE TOP (1024)
   Products
SET
   exported = 1
OUTPUT
   INSERTED.*
WHERE
   exported = 0;
Run Code Online (Sandbox Code Playgroud)

您可以修改它以使用具有“正在处理”“已导出”等状态列,以便您知道何时读取但未导出内容