【问题标题】:How can I import multiple csv files from a folder into sql, into their own separate table如何将文件夹中的多个 csv 文件导入到 sql 中,导入到它们自己单独的表中
【发布时间】:2015-06-27 15:51:58
【问题描述】:

我想要一些关于执行此操作的最佳方法的建议。我有多个具有不同布局的文件,我想创建一个过程将它们导入到 sql 中的新表中。

我编写了一个程序,它使用 xp_cmdshell 来获取文件夹中的文件名列表,并使用光标循环这些文件名并使用批量插入将它们放入 sql 但我不知道最好的方法每次创建一个具有新布局的新表。

我想如果我可以只将列行导入到临时表中,那么我可以使用它来创建一个新表来进行批量插入。但我无法让它工作。

那么使用 SQL 执行此操作的最佳方法是什么?我对.net 也不是很熟悉。我曾考虑在 SSIS 中执行此操作,我知道在 SSIS 中加载多个具有相同布局的文件很容易,但可以使用可变布局吗?

谢谢

【问题讨论】:

  • 我很确定没有简单的方法可以做到这一点,您不仅需要列名、列数,还需要知道每列的数据类型,这在bcp 文件。如果每个 bcp 文件都有一个格式文件,那么您可能会解析该格式文件,但这将是一项巨大的工作。不过,我会更好奇你为什么需要这样做。
  • 看过SQL Server Management Objects (SMO)?正如@Greg 指出的那样,您需要弄清楚列名、计数和数据类型。如果可以做到这一点,那么 SMO 将允许您在 .Net 代码中创建表。附带说明一下,有一个扩展的存储过程 (xp_dirtree),它将列出文件。 DBA 有充分的理由不愿意启用 xp_cmdshell。

标签: sql-server tsql csv ssis


【解决方案1】:

您可以使用BimlScript 使整个过程自动化,您只需将其指向感兴趣的路径,它就会为您编写所有 SSIS 和 T-SQL DDL,但您需要付出努力编写 C# d需要,你也可以把数据转储到C#中的SQL Server中。

不过,您可以使用 SSIS 来解决这个问题,并且有几个级别的工作可供选择。

最简单的方法是使用SQL Server Import and Export Wizard 从您的 Excel 电子表格创建 SSIS 包,将工作表转储到自己的表格中。每次您想要导入新的电子表格时都必须运行此向导,但您可以保存包以便再次重新导入该电子表格。

下一个级别是编辑已保存的 SSIS 包(或从头开始编写)以参数化文件路径和目标表名称,然后您可以将该包重新用于任何遵循相同格式的电子表格。

接下来将编写一个包,该包确定要调用的上一级包中的哪个包。如果您可以有效地查询标题行,您可能会编写一个接受路径作为输入参数的 SSIS 包,找到该路径中的所有 Excel 工作表,查询标题行以确定电子表格格式,然后将该信息传递给该格式类型的参数化包。

当然,SSIS 开发是它自己的主题 - Integration Services Features and Tasks on MSDN 是一个很好的起点。 SSIS 有其怪癖,如果您想进行大量 SSIS 开发,我强烈建议您学习 BimlScript。如果您想更详细地讨论上述想法需要什么,请随时给我发消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2022-11-30
    • 2019-08-18
    • 2022-12-09
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多