【问题标题】:SSIS Dynamic File Import to SQL TablesSSIS 动态文件导入到 SQL 表
【发布时间】:2017-04-29 02:31:09
【问题描述】:

我有 8 个“.txt”文件,所有文件都有不同的列,我想在 SSIS 中创建一个循环,以便使用动态命名导入单独的 SQL 表。所以喜欢 “静态文本”+“文件名”,其中文件名是可变的。

在此之前我已经制作了包,但它们仅适用于具有静态列的文件,它们只是附加到同一个 SQL 表中。不过,我现在正在为每个通过循环运行的文件创建一个新的 SQL 表。

在 SSIS 中有没有这样做?如果有人可以提出修改建议,我在下面截取了我的一些包。提前感谢您提供的任何帮助。

【问题讨论】:

  • 你不能这样做。 SSIS 需要在设计时更正元数据(列、数据类型等)。您不能在运行时动态更改它们。
  • 您确定没有办法在 SSIS 中对此进行编码吗?我以前见过这样做,只是不确定我还需要什么。
  • 您应该能够从文本文件中提取列名,并使用这些名称来构建动态 sql 语句来创建表,然后使用执行 SQL 任务来执行您准备好的创建表命令。

标签: sql-server import ssis


【解决方案1】:

如果您有许多具有不同结构的来源,则无法执行此操作。因为 SSIS 需要在设计时更正元数据(列、数据类型等)。

但是,如果您有相同结构的表,则必须创建一个目标表 (temp),并将其名称放在变量 VarFileName 中,并在 OLEDB Destination 中映射列。并且您必须将 DataFlowTask 属性 DelayValidation 设置为 True。因此在开始执行 DataFlowTask 之前不会检查元数据。

应使用表达式(从变量传递表名)通过Execute SQL Task 完成创建表

希望对你有帮助

【讨论】:

    【解决方案2】:
    1. 创建循环。如图所示,将脚本任务和 DFT 任务放入其中。

    1. 创建源变量和目标变量,并为它们分配一些临时表名称。这些表应该存在。

    2. 脚本任务将更新源表和目标表。 跟着图片走

    我将源表和目标表的值更改为“dbo.T2”和“dbo.T4”。但是您必须根据您的要求进行更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      相关资源
      最近更新 更多