2010-12-07 25 views
1

我寫在SQL Server 2008中下面的代碼存儲的過程:鎖定聲明不會與INNER JOIN編譯目前

SELECT  @LastAccessed = cs.LastAccessed 
FROM  [int].ClientSessions AS cs INNER JOIN 
      dbo.Profiles AS p ON cs.ProfileID = p.ProfileID 
WITH  (XLOCK, ROWLOCK) 
WHERE  (p.ClientID = @ClientID) 

...將無法編譯,在XLOCK指出語法錯誤。

如果我刪除了INNER JOIN語句(這是不可能的,因爲我需要連接),那麼使用XLOCK就沒有問題。我沒有看到問題是什麼。

注:我只想鎖定[int] .ClientSessions表,所以我意識到這可能不是最好的方法。

回答

2

您必須在as cs/as p聲明後面輸入WITH (XLOCK, ROWLOCK)

喜歡的東西

SELECT  @LastAccessed = cs.LastAccessed 
FROM  [int].ClientSessions AS cs WITH (XLOCK, ROWLOCK) INNER JOIN 
      dbo.Profiles AS p ON cs.ProfileID = p.ProfileID 
WHERE  (p.ClientID = @ClientID) 

看一看Table Hints (Transact-SQL)

+0

哇,這是不是我的猜測名單。謝謝。 – IamIC 2010-12-07 09:31:10