如何在数据流任务中解决vs_needsnewmetadata错误?

6
我有一个SSIS包,可以将一个SQL Server 2005表中的数据复制到另一个SQL Server 2005。我使用“数据流”任务来完成这个过程。在包配置文件中,我公开了目标表名。
问题是当我在配置文件中更改目标表名时(通过记事本),我会收到以下错误“vs_needsnewmetadata”。我认为我理解了问题...当我第一次设置包时,目标表列映射就已经固定了。
问题:用SSIS包执行上述操作最简单的方法是什么?
我在网上阅读了关于以编程方式设置元数据的内容,但我想避免这种方法。此外,我编写了一个C#控制台应用程序,可以完美地完成所有操作...所有表等都在app.config中指定...但显然这个解决方案不够好。
4个回答

6
你是否在数据源目标属性中将DelayValidation设置为False?如果没有,请尝试这样做。
编辑:当然应该将DelayValidation设置为True,这样它就可以直接尝试而不是检查。另外,为什么不将表名放入变量中,在目标的表达式中使用变量,然后在.DtsConfig配置文件中公开变量呢?那样你就可以安全地更改它了,而无需在记事本中修改包。

2

将大小写敏感的源目标列进行匹配已经为我完成了工作。

就像在我的情况中,SrNo_prod是开发中的列,我们使用它开发了dtsx。而在生产环境中,它被创建为SrNo_Prod,在从P更改为p时,我们成功执行了包。


1

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

我认为如果列不同,则会发生错误,目标无法将其输入列映射到表列。如果两个表具有相同的模式,则不应出现此错误。


0
如果你只是从一个SQL2005服务器复制数据到另一个服务器,我建议你创建一个链接服务器并使用存储过程来复制数据。SSIS包会显得有些过度了。 如何创建链接服务器 一旦链接服务器被创建,你只需要编写类似以下的程序...
INSERT INTO server1.dbo.database1.table1(id,name)
SELECT id, name FROM server2.dbo.database1.table1

就SSIS包而言,每当修改表列属性时,我总是不得不重新打开和重建包,以便更新元数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接