我有一张桌子,从中我经常想要所有的数据(这是一个由另一个程序填充的缓冲区)。我也希望一旦读完就将这些数据从表中删除。所以我有类似
的东西BEGIN TRANS T1;
DELETE FROM table_name OUTPUT DELETED.*;
COMMIT TRANS T1;
在阅读器程序中,我使用DataReader遍历每一行。我担心的是,如果在读取这些数据时出现问题怎么办?比如说,线程崩溃了,我只阅读了部分数据。如果这是一个交易,它在什么时候承诺?当我开始阅读它?我宁愿反对锁定这个表一段时间,因为还有另一个程序总是试图写入它。
是否有更好的方法可以做到这一点?我有一个程序,它不断地将一个记录一个接一个地写入此表,我希望这个程序进入并获得它。我正在一把手抓住它,所以我可以使用DELETE - OUTPUT DELETED,而不是更昂贵的一系列“删除where”子句。我更喜欢作家和读者都可以不间断地继续前进的方式。
答案 0 :(得分:3)
这种方法无法确定。
我会建议这样的事情。
将要删除的记录移至登台表。
将登台表内容输出到应用程序
从申请中确认已处理内容。
从登台表中删除内容。
答案 1 :(得分:0)
崩溃DataReader并查看。
你能使用MSMQ而不是SQL吗?
选项A - 霍根 - 好的答案
选项B
它有PK吗?
删除真的太贵了吗?
它摆脱了交易的需要。
选项C
将X的块(顶部)(如1000)读入.NET集合而不是另一个表。
删除(....)