如何克服Data Flow任务中的vs_needsnewmetadata错误?

时间:2020-03-06 14:37:44  来源:igfitidea点击:

我有一个SSIS包,可以将表中的数据从一个SQL Server 2005复制到另一个SQL Server2005. 我使用"数据流"任务来完成此操作。在软件包配置文件中,我公开了目标表名称。

问题是,当我更改配置文件中的目标表名称(通过记事本)时,出现以下错误" vs_needsnewmetadata"。我想我理解问题了……首次设置软件包时,目标表的列映射是固定的。

问题:使用ssis软件包进行上述操作的最简单方法是什么?

我已在线阅读有关以编程方式设置元数据的信息,但我想避免这种情况。我也写了一个Cconsole应用程序,它做的一切都很好……所有表等都在app.config中指定了……但是显然这个解决方案还不够好。

解决方案

如果我们要做的只是将数据从一台SQL2005服务器复制到另一台SQL2005服务器,我将创建一个链接服务器并使用存储的proc复制数据。一个SSIS包太过分了。

如何创建链接服务器

创建链接服务器后,我们只需编写类似...的程序即可。

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

到目前为止,我一直必须重新打开并重建SSIS包,以便在修改表列属性时更新元数据。

检查新目标表是否与旧目标表具有相同的列。

我相信如果列不同,则会发生错误,并且目标不能再将其输入列映射到表列。如果两个表具有相同的架构,则不应发生此错误。

我们是否已在"数据源目标"属性上将DelayValidation设置为False?如果没有,请尝试。

编辑:当然应该将DelayValidation设置为True,所以它只是继续进行尝试而不是进行检查。此外,为什么不在记事本中更改程序包,为什么不将表名放在变量中,将变量放在目标位置的Expression中,然后在.DtsConfig配置文件中公开变量?然后,我们可以无危险地进行更改。