我想从链接服务器使用top子句更新#temp表,但得到一个非常奇怪的结果 - 它似乎忽略了在我的代码中的顺序。使用top clasue从链接服务器更新临时表
我可以通过编程方式解决特定问题,但想知道这是否是一次性问题,或者是否存在关联服务器的常见问题。
查询正在链接到通过SQL Server的Microsoft OLE DB提供程序链接的2008 SQL Server R2(10.50.279)的2005 SQL Server(9.0.3042)上运行。
查询看起来像这样 - 我已经创建了#TempTable,它具有Id,Date和PrevDate列,并将数据插入Id和Date列。
update #TempTable
set PrevDate =
(select top 1
d.Date
from
linkedserver.DB.dbo.Date as d
where
d.Id = #TempTable.Id
and d.Date < #TempTable.Date
order by
d.Date desc)
的选择不接顶1,这似乎是捡输入到表中的特定ID的第一次约会,而忽略order by子句。
- 我只是做一个选择,它工作正常
- 当我把在PrevDate通过inital插入,它工作正常。
- 当我使用Max而不是Top时,它工作正常。
- 当我通过一个链接运行SQL 2008服务器上的完全相同的查询/场景(同一服务提供商)回到2005年的SQL Server,它工作正常
我不是在寻找修复这个特定查询,但想知道这是否是一个孤立的事实或2005年至2008年的一些基本问题,这些问题将很难找到方法。
感谢, 添
我同意@Tim,我很惊讶,这不起作用。运行执行计划的任何洞察力?您可能会在TOP发生后发现订单。我可能会运行TOP和MAX语法的执行计划,以查看是否有显着差异。 – sisdog 2012-02-13 06:07:59