обновление временной таблицы со связанного сервера с использованием верхнего класса - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь обновить таблицу #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 гг.проявить себя очень трудно, чтобы найти способы.

Спасибо, Тим

1 Ответ

0 голосов
/ 17 февраля 2012

У меня плохие новости. Я повторил эту проблему здесь. Мне кажется, что это проблема с планом запросов SQL Server 2005 (я также тестировал более позднюю версию, v 9.0.4035):

Изображение: план запроса для оператора обновления

(извините, я не могу вставлять изображения сюда, недостаточно репутации)

Подробности для этого удаленного запроса:

Изображение: данные удаленного запроса

На удаленный сервер не отправляется оператор ORDER BY, поэтому возвращаемые результаты действительно просто TOP (1) в произвольном порядке, который, вероятно, будет в порядке первичного ключа. Мне кажется, что SQL Server должен был испустить ORDER BY Date desc.

Поэтому я должен сделать вывод, что другие запросы, подобные этому, в этой среде могут легко иметь такую ​​же проблему (а значит, не единичный инцидент).

Кстати, с 2009 года уже возникла проблема Microsoft Connect для этой проблемы: connect.microsoft.com/SQLServer/feedback/details/446017/missing-order-by-in-remote-query-with- обновление-заявление

...