我有一个表,我一直想要从中获取所有数据(它是一个由另一个程序填充的缓冲区)。我还希望在阅读完这些数据后将其从表中删除。所以我有类似的东西
BEGIN TRANS T1;
DELETE FROM table_name OUTPUT DELETED.*;
COMMIT TRANS T1;
在阅读器程序中,我使用 DataReader 循环遍历每一行。我担心的是,如果在读取这些数据时出现问题怎么办?比如说,线程崩溃了,我只读取了部分数据。如果这是一个事务,它是在什么时候提交的?我什么时候开始读?我宁愿暂时不要锁定这个表,因为有另一个程序总是试图写入它。
有没有更好的方法来做到这一点?我有一个程序不断地向这个表中写入一条又一条记录,我希望这个程序进入并获取它。我一次把它全部抓起来,这样我就可以使用 DELETE - OUTPUT DELETED,而不是一系列成本更高的“delete where”子句。我更喜欢作者和读者都可以不受干扰的方式。