Могут быть и другие требования, о которых я не знаю, но когда мой код достигает определенного уровня сложности, я обычно отступаю и спрашиваю себя - могу ли я сделать что-нибудь попроще.
В таком случае, не могли бы вы выполнить запрос только по таблице запросов и сохранить значения, возвращенные в таблицу переменных?
Возможно, вам потребуется установить Serializable Transaction Level для того, чтобы получить блокировку строки, которую вы хотите. Не уверен, хотя - нужно будет попробовать с и без.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
DECLARE @TempResults TABLE (RequestID int, Priority int, DateEntered DateTime)
INSERT INTO @TempResults (RequestId, Priority, DateEntered)
SELECT TOP 2 RequestId, Priority, DateEntered FROM Request WITH (ROWLOCK, UPDLOCK, READPAST)
ORDER BY Priority, DateEntered
Теперь, когда строки заблокированы, объедините таблицу и таблицу параметров, чтобы получить требуемый набор результатов.
SELECT * FROM @TempResults Request INNER JOIN Options ON Request.RequestID = Options.RequestIDRef
Я прошу прощения, если это не вариант для вас.