Как преодолеть ошибку vs_needsnewmetadata в задаче потока данных?


5

У меня есть пакет SSIS, который копирует данные в таблице с одного SQL Server 2005 на другой SQL Server 2005. Я делаю это с задачей «Поток данных». В файле конфигурации пакета я раскрываю имя таблицы назначения.

Проблема в том, что я изменяю имя таблицы назначения в файле конфигурации (через блокнот). Я получаю следующую ошибку: «vs_needsnewmetadata». Я думаю, что я понимаю проблему ... сопоставление столбцов таблицы назначения фиксируется, когда я сначала настроил пакет.

Вопрос: какой самый простой способ сделать это с помощью пакета ssis?

Я читал онлайн о создании метаданных программным способом, и все, но я хотел бы избежать этого. Также я написал приложение консоли C#, которое делает все как раз ... все таблицы и т. Д. Указаны в app.config ... но, видимо, это решение недостаточно.

0

Если все, что вы делаете, это копирование данных с одного сервера SQL2005 на другой, я бы просто создал связанный сервер и использовал хранимую копию для копирования данных. Пакет SSIS является излишним.

How to Create linked server

После того, как связанный сервер будет создан, Вы бы просто программа что-то вроде ...

INSERT INTO server1.dbo.database1.table1(id,name) 
SELECT id, name FROM server2.dbo.database1.table1 

Насколько пакет SSIS я всегда должен был заново и восстановить пакет так, что мета данные обновляются при изменении свойств столбцов таблиц.


1

Проверьте, есть ли в новой таблице назначения те же столбцы, что и старый.

Я считаю, что ошибка возникает, если столбцы различны, и адресат больше не может отображать свои входные столбцы в столбцы таблицы. Если две таблицы имеют одну и ту же схему, эта ошибка не должна возникать.


6

Устанавливает ли значение DelayValidation значение False для свойств целевого источника данных? Если нет, попробуйте это.

Редактировать: Конечно, это должно быть DelayValidation до True, поэтому оно просто идет вперед и пытается, а не проверять. Кроме того, вместо того, чтобы изменять свой пакет в «Блокноте», почему бы не поместить имя таблицы в переменную, поместите переменную в выражение в пункт назначения, а затем выведите переменную в файле конфигурации .DtsConfig? Тогда вы можете изменить это без опасности.


2

Соответствующая колонка назначения источника с чувствительным к регистру сделала работу для меня.

Как и в моем случае SrNo_prod был столбец разработчика и используя его, мы разработали dtsx, в то время как он был создан как SrNo_Prod в проде, после внесения изменений случая с P к p, мы получили успешное выполнение пакета.