Цитата:
Сообщение от
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 - не очень хорошая практика. Имеет смысл только в безвыходной ситуации, когда прямое копирование из базы в базу по каким-либо причинам невозможна. Чем меньше посредников - тем лучше.