我想從鏈接服務器使用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