Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос UPDATE к связанному серверу долго выполняется  [new]
Vikolv
Member

Откуда:
Сообщений: 2
Есть запрос
UPDATE CR.Euro2009.dbo.[Товар Цена] 
SET [Посл_ Дата Изменения]=GETDATE()
where         
  ([Товар Но_]='1000001') and 
  ([Код Прайслиста]='АБСОЛЮТ') and 
  ([Код Единицы Измерения]='') and 
  ([Код Валюты]='USD') and
  ([Дата Начала]='2011-02-09T00:00:00')
В таблице [товар цена] 7 млн. записей. Все поля в условии включены в первичный ключ. Т.е. я пытаюсь изменить одну запись в связанном сервере. Запрос выполняется очень долго. В плане выполнения запроса с удаленного сервера считываются ВСЕ данные, хотя обновиться должна одна запись. Select с теми же параметрами выполняется менее 1 секунды. Что делать?
17 июн 11, 11:10    [10826610]     Ответить | Цитировать Сообщить модератору
 Re: Запрос UPDATE к связанному серверу долго выполняется  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
exec('update...') at CR
17 июн 11, 11:23    [10826692]     Ответить | Цитировать Сообщить модератору
 Re: Запрос UPDATE к связанному серверу долго выполняется  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, либо создайте ХП на линкованном сервере с нужной инструкцией и вызывайте её, либо заверните в динамику свою инструкцию с использование в процедуре sp_executesql , которую звать опять таки с линкованного сервера.
17 июн 11, 11:23    [10826693]     Ответить | Цитировать Сообщить модератору
 Re: Запрос UPDATE к связанному серверу долго выполняется  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ога - про exec('update...') at забыл упомянуть... :-\
17 июн 11, 11:24    [10826705]     Ответить | Цитировать Сообщить модератору
 Re: Запрос UPDATE к связанному серверу долго выполняется  [new]
Vikolv
Member

Откуда:
Сообщений: 2
Спасибо.
ХП не подходит обновляется такоим образом две сотни таблиц, писать к каждой ХР на разных серверах грусно.
exec ('') at CR возможно получиться.

А вообще можно как то запретить серверу требовать у связанного весь объем данных.

Вот оригинальный запрос который долго работает:

UPDATE dst --CR.Euro2009.dbo.[Товар Цена] 
SET dst.[Товар Но_]=src.[Товар Но_],dst.[Код Прайслиста]=src.[Код Прайслиста],dst.[Код Валюты]=src.[Код Валюты],dst.[Дата Начала]=src.[Дата Начала],
    dst.[Цена Единицы]=src.[Цена Единицы],dst.[Цена Включает НДС]=src.[Цена Включает НДС],dst.[Разрешить Колич_ Скидку]=src.[Разрешить Колич_ Скидку],
    dst.[Разрешить Скидку Клиент_Товар]=src.[Разрешить Скидку Клиент_Товар],dst.[Разрешить Скидку Счета]=src.[Разрешить Скидку Счета],
    dst.[НДС Бизнес Группа Цены]=src.[НДС Бизнес Группа Цены],dst.[Код Единицы Измерения]=src.[Код Единицы Измерения],dst.[Дата Создания]=src.[Дата Создания],
    dst.[Посл_ Дата Изменения]=src.[Посл_ Дата Изменения],dst.[Акция]=src.[Акция] 
       FROM CR.Euro2009.dbo.[Товар Цена] as dst 
       full join OD.Euro2009.dbo.[Товар Цена] as src 
       ON (dst.[Товар Но_]=src.[Товар Но_] and dst.[Код Прайслиста]=src.[Код Прайслиста] and dst.[Код Единицы Измерения]=src.[Код Единицы Измерения] and dst.[Код Валюты]=src.[Код Валюты] and dst.[Дата Начала]=src.[Дата Начала]) 
      WHERE (not dst.[Товар Но_] is null) and
      ((((src.[Товар Но_]='1000001') and (src.[Код Прайслиста]='АБСОЛЮТ') and (src.[Код Единицы Измерения]='') and (src.[Код Валюты]='USD') and (src.[Дата Начала]='2011-02-09T00:00:00'))))
17 июн 11, 12:52    [10827554]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить