【问题标题】:How to overcome vs_needsnewmetadata error in Data Flow task?如何克服数据流任务中的 vs_needsnewmetadata 错误?
【发布时间】:2010-09-12 13:07:13
【问题描述】:

我有一个 SSIS 包,可以将表中的数据从一个 SQL Server 2005 复制到另一个 SQL Server 2005。我通过“数据流”任务执行此操作。在包配置文件中,我公开了目标表名。

问题是当我在配置文件中更改目标表名(通过记事本)时,我收到以下错误“vs_needsnewmetadata”。我想我明白这个问题了……我第一次设置包时,目标表列映射是固定的。

问题:使用 ssis 包完成上述操作的最简单方法是什么?

我在网上阅读了有关以编程方式设置元数据的信息,但我想避免这种情况。此外,我还编写了一个 C# 控制台应用程序,它可以很好地完成所有操作......所有表等都在 app.config 中指定......但显然这个解决方案还不够好。

【问题讨论】:

    标签: c# ssis packages configuration-files


    【解决方案1】:

    匹配区分大小写的源目标列已经为我完成了工作。

    就像在我的例子中 SrNo_prod 是 dev 中的列,使用它我们开发了 dtsx,而它在 prod 中被创建为 SrNo_Prod,在将案例从 P 更改为 p 之后,我们成功了执行包。

    【讨论】:

      【解决方案2】:

      您是否在 Data Source Destination 属性上将 DelayValidation 设置为 False?如果没有,请尝试。

      编辑:当然,这应该是延迟验证为真,所以它只是继续尝试而不是检查。此外,与其在记事本中更改包,为什么不将表名放入变量中,将变量放入目标的表达式中,然后在 .DtsConfig 配置文件中公开变量?然后你可以毫无危险地改变它。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          如果您所做的只是将数据从一台 SQL2005 服务器复制到另一台服务器,我将创建一个链接服务器并使用存储过程来复制数据。 SSIS 包是多余的。

          How to Create linked server

          创建链接服务器后,您只需编写类似...

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

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

          【讨论】:

            猜你喜欢
            • 2017-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-02
            • 1970-01-01
            • 2019-10-13
            相关资源
            最近更新 更多