如何爲表選擇所有行,它們不是尚未提交的任何事務的一部分?如何僅選擇已提交的行 - sql2008
例子: 比方說,
表T有10行。
用戶A與一些疑問做一個交易:
INSERT INTO T (...)
SELECT ...
FROM T
// doing other queries
現在,這裏到了棘手的部分:
如果用戶B,在用戶之間插入的行和交易時間被更新了系統中的一個列表,並在表T上進行了選擇。
我只希望SELECT用戶B正在使用返回的10行(表中的所有行,不能以後回滾)。如果可能,我該如何做到這一點?
我已經嘗試在事務上設置isolationlevel,並在沒有任何運氣的情況下向查詢中添加「WITH(NOLOCK)」「WITH(READUNCOMMITTED)」。
該查詢要麼返回所有11條記錄,要麼等待事務提交,這不是我所需要的。
任何提示都非常appriciated,謝謝。
READPAST還會跳過與當前正在插入的行位於同一頁面的已提交行嗎? – Andomar 2010-09-06 11:33:12
@Andomar - No實際上「READPAST鎖提示僅適用於在READ COMMITTED隔離操作的事務,並且只讀取過去的行級鎖,僅適用於SELECT語句。」但OP仍然可以被我假設的頁面鎖定阻止。也許快照隔離會更合適。 – 2010-09-06 11:52:45
當我包含WITH(READPAST)時,我終於得到了10行,正如我所要求的。沒有它,只有使用讀提交,我的選擇查詢從未返回。也許我錯了。 – radbyx 2010-09-06 11:56:53