テーブルがあり、そこから常にすべてのデータが必要です(これは別のプログラムによって入力されているバッファーです)。また、このデータを読み取ったら、テーブルから削除したいと思います。だから私は次のようなものを持っています
BEGIN TRANS T1;
DELETE FROM table_name OUTPUT DELETED.*;
COMMIT TRANS T1;
リーダープログラムでは、DataReaderを使用して各行をループしています。私が心配しているのは、このデータの読み取り中に問題が発生した場合はどうなるかということです。たとえば、スレッドがクラッシュし、データの一部しか読み取っていません。これがトランザクションの場合、どの時点でコミットされますか?読み始めたら?別のプログラムが常にテーブルに書き込もうとしているので、しばらくの間このテーブルをロックすることは避けたいと思います。
これを行うためのより良い方法はおそらくありますか?このテーブルに次々とレコードを書き込んでいるプログラムがあり、このプログラムを使用して取得したいと思います。よりコストのかかる一連の「deletewhere」句の代わりに、DELETE-OUTPUT DELETEDを使用できるように、一度にすべてを取得しています。私は、ライターとリーダーの両方が途切れることなく進み続けることができる方法を望んでいます。