2011-06-20 31 views
0

因爲我還不能發佈我的previous question的答案,所以我決定打開一個新帖子。爲了讓事情在該職位的代碼工作,我不得不到提示WITH (... , INDEX (IX_REQUESTID))WITH (... , INDEX (IX_REQUESTIDREF))添加到表分別RequestOptions。看來SQL Server無法找到自己使用哪個索引,因爲現在它正確地完成了這項工作。但現在的問題是其他......我附加條款ORDER BY Priority, DateEntered並且即使沒有對RequestTable(Priority, DateEntered) INCLUDE (RequestID)指數,QUERY2再次返回任何結果的聲明......有什麼可以不對這個時間呢?請幫助我,因爲這非常重要,我自己也找不到答案。通過多個聯接排序

回答

1

可能有進一步的要求,我不知道,但是當我的代碼變得複雜到了一定程度,我通常袖手旁觀,問自己 - 我所能做的事情變得更簡單。

在這種情況下,你能不能運行只是請求表的查詢和存儲的值返回到一個tablevar?

您可能需要設置事務隔離級別Serializable接口,以獲得該行鎖定你的願望。不知道 - 但需要嘗試和沒有。

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 
鎖着行

現在tablevar和選項表之間的連接返回結果集您需要。

SELECT * FROM @TempResults Request INNER JOIN Options ON Request.RequestID = Options.RequestIDRef 

我很抱歉如果這不是您的選擇。