2014-02-24 41 views
0

如何鎖定SQL Server中的表?我發現運行帶鎖的查詢,也讀取交易,但 困惑如何使用這些。如何鎖定SQL Server中的表

我有兩個進程先讀表,然後更新其中的數據。我只想要更新一個,並在其中讀取其他更新。我的方法的工作如下: -

  • 鎖表
  • 讀取數據
  • 更新數據,如果它不被其他進程更新。
  • 釋放鎖定。

感謝

回答

2

您可以使用TABLOCKX提示鎖定整個表,但是鎖定整個表通常是一個壞主意,你可能要重新考慮,如果你真的需要它。

如果要確保更新最新數據,可以使用rowversion列,並在更新之前進行雙重檢查,而不是鎖定整個表以進行讀取。

1

在您的select語句中,您可以提供「select for update」table hintwith (updlock)。根據您正在更新的記錄百分比以及它們的物理分佈情況,這可能會比表鎖更好。

但正如Fedor Hajdu指出的那樣,你可能想要的是一種樂觀的鎖定方案。查看READ COMMITTED SNAPSHOT隔離級別的文檔。您可能也會發現這個article作爲介紹很有用。