2012年3月6日 星期二

解決寫多次WITH(NOLOCK)的方法

問題:日前同事有一個報表會造成其他SQL程式BLOCK,所以同事使用了WITH(NOLOCK),範例程式碼如下:
SELECT * FROM dbo.tabCheckDataCount WITH(NOLOCK)
但是問題來了,那支報表有JOIN到十幾個TABLE,所以他要一個一個的在TABLE後面加上WITH(NOLOCK),而其他幾個也要如此,算一算總共要加N次。

解法:SQL語法的最前面加上SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,如此就不必寫很多次WITH(NOLOCK)
範例程式碼如下:
--不必寫WITH NOLOCK
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT * FROM dbo.tabCheckDataCount

結論:WITH(NOLOCK)可以用在SQL語法讓部分TABLEREAD UNCOMMITED狀態,而SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED則是讓所有讀取的TABLE都為READ UNCOMMITTED

沒有留言:

張貼留言