Sql-Server

SELECT 鎖定僅適用於插入

  • July 5, 2013

我需要獲取MAX事務中某些欄位的聚合。我在交易中進一步使用這個值。MAX我想避免在事務完成時 從我得到的整個表中插入。

我研究了可用的隔離模式和鎖定提示。最接近的似乎是TABLOCKX,這是唯一避免在整個表中插入(也包括更新和選擇)的方法。

由於我不會受到表中的更新或選擇的影響,我希望避免在事務期間僅插入。這個有可能?

更新:執行的欄位MAX僅在插入時設置,因此不存在更新過時結果的風險。

我正在使用 SQL Server 2000。

將隔離級別設置為SERIALIZABLE將具有相同的效果:

最高的隔離級別,可序列化,保證事務每次重複讀取操作時都將檢索完全相同的數據,但它通過執行可能影響多使用者系統中其他使用者的鎖定級別來做到這一點。

TABLOCK就足夠了,沒有必要TABLOCKX實現你到目前為止所描述的。如果您稍後提到的事務更新或插入到表中TABLOCKX,那麼如果它只是為了讀取MAX它是不必要的,其他程序至少能夠從表中讀取。

是否使用隔離級別或TABLOCK提示取決於您將掃描的表的比例以查找MAX聚合。如果您需要觸摸任何顯著百分比的行TABLOCK是合乎邏輯的。一小部分並希望保持一定程度的並發性然後嘗試SERIALIZABLETABLOCK也將消除死鎖風險。

這兩個選項都將實現您防止聚合結果不一致的目標。

引用自:https://dba.stackexchange.com/questions/45756