Sql server 如何确定我';在提交事务之前,您是否已读取所有SQL输出?

Sql server 如何确定我';在提交事务之前,您是否已读取所有SQL输出?,sql-server,vb.net,tsql,Sql Server,Vb.net,Tsql,我有一个表,从中我一直想要所有的数据(它是一个由另一个程序填充的缓冲区)。我还希望在阅读完该数据后将其从表中删除。所以我有点像 BEGIN TRANS T1; DELETE FROM table_name OUTPUT DELETED.*; COMMIT TRANS T1; 在reader程序中,我使用一个DataReader循环遍历每一行。我担心的是,如果在读取这些数据时出现问题怎么办?比如说,线程崩溃了,我只读取了部分数据。如果这是一个事务,它在什么时候提交?我什么时候开始读?我宁愿暂时不

我有一个表,从中我一直想要所有的数据(它是一个由另一个程序填充的缓冲区)。我还希望在阅读完该数据后将其从表中删除。所以我有点像

BEGIN TRANS T1;
DELETE FROM table_name OUTPUT DELETED.*;
COMMIT TRANS T1;
在reader程序中,我使用一个DataReader循环遍历每一行。我担心的是,如果在读取这些数据时出现问题怎么办?比如说,线程崩溃了,我只读取了部分数据。如果这是一个事务,它在什么时候提交?我什么时候开始读?我宁愿暂时不要锁定这个表,因为有另一个程序总是试图写入它


有没有更好的办法?我有一个程序,它不断地把一条又一条记录写到这个表中,我想让这个程序进入并获取它。我一把抓住它,这样我就可以使用DELETE-OUTPUT-DELETED,而不是一系列更昂贵的“DELETE-where”子句。我更希望作者和读者都能不间断地进行写作。

这种方法无法确定

我建议这样做

  • 将要删除的记录移动到临时表

  • 将暂存表内容输出到应用程序

  • 从应用程序获得内容已处理的确认

  • 从临时表中删除内容


  • 用这种方法无法确定

    我建议这样做

  • 将要删除的记录移动到临时表

  • 将暂存表内容输出到应用程序

  • 从应用程序获得内容已处理的确认

  • 从临时表中删除内容


  • 使数据读取器崩溃并查看

    您可以使用MSMQ而不是SQL吗

    选项A-霍根-好答案

    选项B
    它有主键吗?
    删除内容的成本真的太高了吗?
    它不再需要交易

    选项C
    将X(如1000)的块(顶部)读入.NET集合,而不是另一个表。
    删除(..)中的where ID

    使数据读取器崩溃,请参阅

    您可以使用MSMQ而不是SQL吗

    选项A-霍根-好答案

    选项B
    它有主键吗?
    删除内容的成本真的太高了吗?
    它不再需要交易

    选项C
    将X(如1000)的块(顶部)读入.NET集合,而不是另一个表。 删除(..)中的where ID