我正在SQL Server 2008中编写存储的proc。以下代码:
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表,所以我意识到这可能不是最好的方法。
最佳答案
您必须将WITH (XLOCK, ROWLOCK)
放在as cs
/as p
语句之后。
就像是
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)
关于sql-server - 当前存在INNER JOIN的情况下,锁定语句无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4375040/