数据传输,从.csv到db。哪一个是最好的方法?

时间:2012-02-24 20:52:46

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

目前我正在进行从.csv文件到DB的非常棘手的转换。我必须开发一个package / solution / xxxyyy来处理从这个.csv文件到我的SQL Server DB的数据流(.csv每天都用新数据更新)。

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

员工有以下字段:

name;surname;id;roles

字段“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也不是存储过程中的专家,我决定写在这里,看看是否有人可以解释我,如果以前的方法之一是正确的方法,或者我是否必须考虑其他(更好的)解决方案。

对不起,我的英语很差,任何帮助都是ty =)

3 个答案:

答案 0 :(得分:2)

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

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

我在这里建议类似的东西。将这个导入任务分解成小块,然后担心宏伟的设计。 SSIS,procs,编译代码......其中任何一个都可能适合你。你只需要知道你需要它做什么。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

看起来该任务非常适合bcp utilityBULK INSERT命令