これらのテーブルを検討します。
CREATE TABLE Status (current_partition INT) -- has a single row
CREATE TABLE RecordedValues (partition INT, value INT)
RecordedValues
を使用してテーブルに頻繁に挿入する複数のクライアントがあるとしますcurrent_partition
。例:
DECLARE @current_partition INT
SET @current_partition = (SELECT TOP 1 current_partition FROM Status)
INSERT RecordedValues VALUES (@current_partition, 132)
同時に、を(定期的に)変更current_partition
し、古いパーティション値ですべての値を読み取るクライアントがあります。例:
DECLARE @old_partition INT
SET @old_partition = (UPDATE Status
SET current_partition += 1
OUTPUT deleted.*)
--
SELECT * FROM RecordedValues WHERE partition = @old_partition
後者のクライアントが実際に古いパーティション値を持つすべての行を選択するようにするにはどうすればよいですか?つまり、 SELECTが戻った後にINSERTがコミットされないようにする必要があります。