我有一个SSIS包,可以将表中的数据从一个SQL Server 2005复制到另一个SQL Server 2005.我使用“数据流”任务执行此操作。在包配置文件中,我公开了目标表名。
问题是当我在配置文件中更改目标表名称时(通过记事本)我收到以下错误“vs_needsnewmetadata”。我想我理解了这个问题......当我第一次设置包时,目标表列映射是固定的。
问题:使用ssis包进行上述操作最简单的方法是什么?
我在线阅读有关以编程方式设置元数据的内容,但我想避免这种情况。我还编写了一个C#控制台应用程序,可以完成所有工作......所有表格等都在app.config中指定......但显然这个解决方案还不够好。
答案 0 :(得分:6)
您是否在数据源目标属性上将DelayValidation设置为False?如果没有,请尝试。
编辑:当然应该是DelayValidation为True,所以它只是继续尝试而不是检查。此外,不是在记事本中更改包,为什么不将表名放在变量中,将变量放入目标上的Expression中,然后在.DtsConfig配置文件中公开变量?然后你可以毫无危险地改变它。
答案 1 :(得分:2)
匹配源目标列与区分大小写对我来说已经完成了工作。
就像在我的情况下,SrNo_prod
是dev中的列并使用它我们开发了dtsx,而在将SrNo_Prod
更改为{{}之后,它已在prod中创建为P
{1}},我们成功执行了包。
答案 2 :(得分:1)
检查新目标表是否与旧目标表具有相同的列。
我相信如果列不同,则会发生错误,并且目标无法再将其输入列映射到表列。如果两个表具有相同的模式,则不应发生此错误。
答案 3 :(得分:0)
如果您所做的只是将数据从一个SQL2005服务器复制到另一个SQL2005服务器,我只需创建一个链接服务器并使用存储过程来复制数据。 SSIS包太过分了。
创建链接服务器后,您只需编写类似......
的程序INSERT INTO server1.dbo.database1.table1(id,name)
SELECT id, name FROM server2.dbo.database1.table1
就SSIS包而言,我总是不得不重新打开并重建包,以便在修改表列属性时更新元数据。