【问题标题】:How to import multiple csv files with different headers into database using SSIS?如何使用 SSIS 将具有不同标题的多个 csv 文件导入数据库?
【发布时间】:2019-05-26 04:08:00
【问题描述】:

我正在编写一个 SSIS 包以将文件夹中的多个文件与列的变化导入数据库。但是无法找到解决方案,因为一个表有 12 列和其他 2 列,并且在设置数据流时没有得到如何使表动态而不考虑列。任何其他比 SSIS 更好的解决方案也值得赞赏

【问题讨论】:

  • SSIS 不支持动态列。如果您的源表或目标表的列定义可能发生更改,则包将失败,因为表/文件中保存的元数据已过时。为什么表中的列数会定期变化;这听起来更像是糟糕的桌子设计。我习惯于文件的定义不时更改,但表格通常不会更改,除非经过您的开发周期;然后更新你的包将是其中的一部分。
  • 同意 Larnu 的观点,但有一点需要注意……可能有 2 或 3 个不同的结构需要导入。在这种情况下,您应该为每种文件类型使用不同的子文件夹。
  • 只是重读:但是,如果您的意思是您有不同的文件需要映射到不同的表,但这些表/文件的定义是静态的,那么您似乎正在尝试创建“一刀切”的源/目标。你不能那样做。您可以在单个数据流中与多个源和目标进行交互,但需要定义每个流中数据的定义。例如,您可以在一个数据流任务中拥有 3 个流,所有流都具有定义定义,这很好;您甚至可以使用转换和合并它们使它们相同。
  • “子文件夹”@AngelM.?目录的结构与此有什么关系?
  • 我的意思是,如果有2种不同类型的文件,需要为每个文件创建一个与SSIS相同的子文件夹,将每个SSIS链接到一个子文件夹并导入相应的表中。

标签: sql-server ssis build-automation


【解决方案1】:

查看此链接中的讨论: Can SSIS import data from multiple files to multiple tables in loop?

您可以使用 BCP 或批量插入将文件加载到不同的表中。

来自你的描述:

数据库有固定数量的表在每个数据库中都是相同的,但是 18 个表有不同的列.... 例如:DB1 有 [db1].[T1],[db1].[T2] DB2 具有 [db2].[T1],[db2].[T2] 因此 [db1].[T1] 结构与 [db2].[T1] 相同,但 [db1].[T1] 具有与 [db1 不同的结构].[T2]

您需要做的是将文件表映射存储在控制表中,然后使用脚本任务连接传递给服务器的动态 SQL 语句。

【讨论】:

    猜你喜欢
    • 2017-03-10
    • 2020-08-20
    • 2021-12-05
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多