sql-server - 当前存在INNER JOIN的情况下,锁定语句无法编译

标签 sql-server stored-procedures locking syntax-error

我正在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/

相关文章:

json - SQL JSON 乘法 CROSS APPLY

sql-server - T-SQL FETCH_STATUS 替代方案

c# - 在多线程环境中使用 Interlocked.Decrement 以及 monitor.wait 和 monitor.pulse 时的错误行为

mysql - Peewee 行级阻塞

locking - 票证锁定算法性能?

php - 检查引用另一个表的表中的特定行?

SQL Server 从二进制数据类型到数字数据的转换问题

mysql - 如何在存储过程中提示输入

c# - 将巨大的 xml 参数传递给存储过程的最佳方法

sql - 在 Where 子句中使用别名