Показать сообщение отдельно
Старый 02.08.2017, 11:31   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,709 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от smailik Посмотреть сообщение
Еще был вариант слинковать сервера и написать что-то вроде
X++:
update t1 set t1.Image=t2.Image
from TableWithImage t1 join [SQLAx4].Ax4.dbo.TableWithImage  t2
но мне сказали что при выполнении подобных запросов на линкованных серверах сначала требуемая таблица полностью скачается на сервер, а лишь потом из неё сделается выборка.
Зависит от того, есть ли ограничение в директиве Where по удаленной таблице. Если where ограничивает выборку в базе Ax2012, то да, сначала скачает все из Ax4.0, потом начнет искать нужное. Соответственно, надо сконструировать запрос так, чтобы ограничение where касалось удаленной таблицы или продублировать условие связи. Ну, как-то так

X++:
update t1 set t1.Image=t2.Image
from TableWithImage t1 
join [SQLAx4].Ax4.dbo.TableWithImage  t2 on t1.ItemId = t2.ItemId
where t1.ItemId = XXX
    and t2.ItemId = XXX

//или так

update t1 
set t1.Image=(select top 1 t2.image from [SQLAx4].Ax4.dbo.TableWithImage  t2 where t2.ItemId = XXX)
from TableWithImage t1
where t1.ItemId = XXX
Собственно, можно же не одну команду UPDATE-SQL передать, а набор команд, если поиск нужной записи в Ax4.0 не так прост. Или сделать хранимку в базе Ax4.0, чтобы она возвращала только одну картинку по переданному параметру

В общем случае, прокачка данных через Axapta - не очень хорошая практика. Имеет смысл только в безвыходной ситуации, когда прямое копирование из базы в базу по каким-либо причинам невозможна. Чем меньше посредников - тем лучше.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: smailik (1).