【问题标题】:Data transferring, from .csv to db. Which one is the best way?数据传输,从 .csv 到 db。哪一个是最好的方法?
【发布时间】:2012-02-24 20:52:46
【问题描述】:

目前,我正在处理从 .csv 文件到 DB 的非常棘手的传输。我必须开发一个包/解决方案/xxxyyy 来处理从这个 .csv 文件到我的 SQL Server DB 的数据流(.csv 每天都会用新数据更新)。

我的老板“建议”我应该使用的方法是通过 SSIS(通常我会编写某种“解析器”来轻松地从 .csv 中传输数据)。事实上,我还有很多事情要做。

员工有以下字段:

name;surname;id;roles

“角色”字段的格式如下:

role1,role2,role3

我的数据库中的这种关系映射到 3 个不同的表中:

tblEmployee
    PK_Emp | name | surname

tblRoles
    PK_Role | roleName

tblEmployeeRole
    PK_Emp | PK_Role

因此,我必须从 .csv 中提取单个员工的角色,将其插入 tblRoles(检查是否有重复)。然后我必须管理 tblEmployeeRole 中的关系。

考虑到这只是我必须管理的不同转换之一的示例,我想知道 SSIS 是否是实现我的目标的最佳工具(如果是脚本组件则加载)。当我向老板解释我的困惑时,他想出了这个“想法”:

使用 SSIS 将数据原样传输到临时表中,然后通过存储过程处理不同的转换。

从我对存储过程的了解很少,我不确定我是否应该遵循这个想法。 现在,考虑到我的实际上司不是那么开明的项目经理(他通常会用奇怪的想法搞砸我们的工作),并且考虑到我在 SSIS 和存储过程方面都不是这样的专家,所以我决定写在这里,看看是否有人可以解释我之前的方法之一是否正确,或者我是否必须考虑其他(更好的)解决方案。

抱歉我的英语不好,请帮忙=)

【问题讨论】:

  • 我们可以使用 id 来唯一标识一行吗?

标签: c# sql-server stored-procedures ssis


【解决方案1】:

我会按原样插入 CSV 文件中的数据。 然后在数据库端进行任何解析。如果这是必须经常做的事情,那么我会使用您为此制作的任何脚本并从中创建过程/函数。这个问题有点宏大,所以这只是一个通用的解决方案。如果您需要帮助将角色解析到查找表中,那么这将更具体且更好用。 一般来说,当我处理需要解析为 SQL 结构的大量平面文件数据集时:

  • 按原样导入数据
  • 找出查找代码之间的共同点
  • 创建基本查找表(在您的情况下是 tblRoles)
  • 创建一个脚本以插入到 tblEmployee 和 tblEmployee 角色中
  • 一旦我的测试场景工作,我担心将每个组件步骤组合成一个单一的 SSIS 或存储过程。

我在这里建议类似的东西。把这个导入任务分解成小块,以后再担心宏大的设计。 SSIS、procs、编译代码……这些都可能适合你。你只需要知道你需要它做什么。

【讨论】:

    【解决方案2】:

    根据您的转换,它们都可以在 SSIS 中完成。如果您不需要存储原始 .csv 数据,我会远离存储过程和临时表,因为您绕过了 SSIS 的大部分优势。

    例如,您可以查找传入的数据以确定正确的关系并将这些结果插入到多个表中(示例中的 3 个)。

    【讨论】:

      【解决方案3】:

      看起来任务很适合bcp utilityBULK INSERT命令

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 2012-05-11
        • 1970-01-01
        相关资源
        最近更新 更多