通过多个联接排序

时间:2011-06-20 11:39:02

标签: sql-server-2005

由于我无法向previous question发布答案,我决定开一个新帖子。为了使用该帖子中的代码,我必须分别将WITH ( ... , INDEX ( IX_REQUESTID ) )WITH ( ... , INDEX ( IX_REQUESTIDREF ) )提示添加到表RequestOptions。似乎SQL Server无法找到自己使用的索引,因为现在它正确地完成了工作。但现在问题是其他...我在语句ORDER BY Priority, DateEntered中附加了句子,即使(Priority, DateEntered) INCLUDE (RequestID)上的RequestTable上有索引,但Query2再没有返回结果...这次有什么不妥?请帮助我,因为这非常重要,我自己无法找到答案。

1 个答案:

答案 0 :(得分:1)

可能还有其他要求我不知道,但是当我的代码达到一定程度的复杂性时,我通常会退后一步并问自己 - 我可以做些简单的事情。

在这种情况下,您是否可以仅在Request表上运行查询并将返回的值存储到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和Options表之间锁定行,以返回您需要的结果集。

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

如果这不是您的选择,我道歉。