Я пытаюсь обновить таблицу #temp со связанного сервера, используя предложение top, но получаю очень странный результат - похоже, в моем коде игнорируется порядок выполнения.
Я могу решить конкретную проблему программно, но хотел бы знать, если это единственная проблема или есть общая проблема с тем, как я связал серверы.
Запрос в настоящее времяработать на SQL Server 2005 (9.0.3042), связанном с SQL Server R2 2008 (10.50.279), связанном с помощью поставщика Microsoft OLE DB для SQL Server.
Запрос выглядит следующим образом - я уже создал#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, он, кажется, выбирает первую дату, введенную втаблица для конкретного идентификатора и игнорирование порядка по выражению.
- Когда я просто делаю выбор, он отлично работает
- Когда я вставляю PrevDate через начальную вставку, он работаетхорошо.
- Когда я использую Max, а не Top, он работает нормально.
- Когда я запускаю точно такой же запрос / сценарий на SQL Server 2008 через ссылку (того же поставщика) обратно кSQL Server 2005, работает нормально
Я не ищу исправления для этого конкретного запроса, но хотел бы знать, является ли это изолированным отступлением или какой-то фундаментальной проблемой, связанной с связыванием 2005-2008 гг.проявить себя очень трудно, чтобы найти способы.
Спасибо, Тим