Обновление таблицы с использованием служб SSIS
Я пытаюсь обновить поле в таблице данными из другой таблицы на основе общего ключа. Если бы это было в прямом SQL, это было бы что-то вроде:
Update EHSIT
set e.IDMSObjID = s.IDMSObjID
from EHSIT e, EHSIDMS s
where e.SITENUM = s.SITE_CODE
Однако две таблицы не находятся в одной базе данных, поэтому я пытаюсь использовать SSIS для обновления. Да, и sitenum/site_code - это varchar в одном и nvarchar в другом, поэтому мне придется выполнить преобразование данных, чтобы они соответствовали.
Как мне это сделать?
У меня есть объект потока данных с источником как EHSIDMS и местом назначения как EHSIT. У меня есть преобразование данных для преобразования Unicode в не-Unicode. Но как мне обновить на основе совпадения? Я пытался с назначением, используя команду SQL в качестве режима доступа к данным, но, похоже, нет исходной таблицы. Если я просто сопоставляю поле, которое будет обновлено, как оно ограничивает его на основе сопоставления полей?
Я собираюсь экспортировать мою исходную таблицу в Excel или что-то еще, а затем попытаться ввести оттуда, хотя мне кажется, что все, что мне нужно, это удалить этап преобразования данных.
Не должно ли быть задача обновления данных или что-то? Это одна из тех задач преобразования потока данных, и я просто не понимаю, что это?
4 ответа
Вы можете использовать SQLCommand (с параметрами), но вы будете эффективно писать UPDATE
для каждого ряда. Я нашел, что лучше написать промежуточную таблицу на стороне назначения (либо все данные с удаленной стороны, либо данные, определенные SSIS для изменения) и использовать один SQL UPDATE
выполнить обновление.
Вы всегда можете использовать полное имя базы данных.
UPDATE server1.databasename.EHSIT
SET E.IDMSOBJID = S.IDMSOBJID
FROM server1.databasename.EHSIT E, server2.databasename.EHSIDMS S
WHERE E.SITENUM = S.SITE_CODE
[serverpath].[database].[databaseobject]
Я бы использовал преобразование поиска. Нет необходимости в постановке - не нужно писать код SQL - так и должно было быть в SSIS!
Я обнаружил, что при использовании медленно меняющегося измерения с бизнес-ключом в качестве значения, которому вы соответствуете, и другими атрибутами, которые вы хотите обновить по мере изменения значений, похоже, работает.
Devtron, я пробовал это и получаю ошибки о пути к серверу, в нем много /. Мне также сказали, что на это высоко смотрят свысока, особенно если это операция, которая часто происходит.