Оператор блокировки не будет компилироваться с присутствующим INNER JOIN - PullRequest
1 голос
/ 07 декабря 2010

Я пишу сохраненный процесс в SQL Server 2008. Следующий код:

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, поэтому я понимаю, что это может быть не лучшим подходом.

1 Ответ

2 голосов
/ 07 декабря 2010

Вы должны поставить 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)

Посмотрите на Таблица подсказок (Transact-SQL)

...