2008-11-22 53 views

回答

62

是的,NOLOCK會傳播到視圖定義使用的表(至少在SQL Server 2005中)。

Table Hints在MSDN:

在SQL Server 2005中,所有的鎖提示將傳播到所有在一個視圖中引用的所有表和視圖。此外,SQL Server執行相應的鎖一致性檢查。

然而,

如果表中包含計算列和所計算的列由表達式或訪問在其它表中的列函數來計算,該表提示不會在這些表中使用。這意味着表格提示不會傳播。例如,查詢中的表中指定了NOLOCK表提示。此表計算的列是通過訪問另一個表中的列的表達式和函數的組合計算出來的。表達式和函數引用的表在訪問時不使用NOLOCK表提示。

如果您使用的是索引視圖,您可能需要閱讀更多內容,因爲這裏也有一些特殊情況。

另請參閱View Resolution瞭解更多信息。

+0

感謝您的信息,我有一個索引視圖的交叉表唯一性約束,但它沒有在這個特定的查詢中使用。 – Turnkey 2008-11-22 23:18:29

12

只是爲了補充羅裏的優秀答案。

他寫道:「是的,NOLOCK將傳播到(至少在SQL Server 2005)使用的視圖定義中的表。」

事實上,這也可以在SQL 2000中工作。 From BOL:

因爲select_statement中使用SELECT語句,它是有效使用,並提示在FROM子句中指定。有關更多信息,請參閱FROMSELECT

+2

我可以確認我已經在SQL 2000視圖中測試過並使用了它。 – 2011-12-12 16:40:29

相關問題