SQL开始事务没有提交

时间:2011-08-23 06:51:32

标签: sql-server-2008 transactions

如果我开始交易,但永远不会调用COMMIT。数据会发生什么变化? 我有一个小的数据库(比如一百万左右的SKU)。我用1024的小偶数块导出它..(第三方约束限制我的文件大小)。
我必须标记已导出的记录..

例如。更新产品set exported = 1其中sku ='1234';

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

所以我想在更新记录之前调用begin transaction,并在确认文件构建完成后才提交。

这可能导致一些没有双胞胎的开始交易。

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

1 个答案:

答案 0 :(得分:4)

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

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

UPDATE TOP (1024)
   Products
SET
   exported = 1
OUTPUT
   INSERTED.*
WHERE
   exported = 0;

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