Порядок с несколькими объединениями - PullRequest
0 голосов
/ 20 июня 2011

Поскольку я не могу опубликовать ответ на свой предыдущий вопрос , я решил открыть новое сообщение. Чтобы заставить код работать в этом посте, мне нужно было добавить подсказки WITH ( ... , INDEX ( IX_REQUESTID ) ) и WITH ( ... , INDEX ( IX_REQUESTIDREF ) ) в таблицы Request и Options соответственно. Кажется, что SQL Server не смог найти какой индекс использовать сам, потому что теперь он выполняет свою работу правильно. Но теперь проблема в другом ... Я добавил к утверждению предложение ORDER BY Priority, DateEntered, и, хотя на RequestTable есть индекс (Priority, DateEntered) INCLUDE (RequestID), Query2 снова не возвращает результатов ... Что может быть не так в этот раз ? Пожалуйста, помогите мне, так как это действительно важно, и я не могу сам найти ответ.

1 Ответ

1 голос
/ 20 июня 2011

Могут быть и другие требования, о которых я не знаю, но когда мой код достигает определенного уровня сложности, я обычно отступаю и спрашиваю себя - могу ли я сделать что-нибудь попроще.

В таком случае, не могли бы вы выполнить запрос только по таблице запросов и сохранить значения, возвращенные в таблицу переменных?

Возможно, вам потребуется установить 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

Я прошу прощения, если это не вариант для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...