如何将CSV文件导入到具有不同列数的SQL Server中?

时间:2013-02-14 18:37:59

标签: sql-server sql-server-2005 ssis

我们希望再次使用SQL SSIS 2005进行导入,其中CSV文件的每行的列数不同。即

我们先说3行:

"1", "FirstName1", "LastName1"
"2", "FirstName2", "LastName2"
"3", "FirstName3", "LastName3"

4-5行:

"210", "Crows st", "Melbourne", "VIC"
"212", "Cr st", "Melbourne", "VIC"

他人:

"100", "Activities 1"
"101", "Activities 2"

我们做的唯一方法是,如果数据行少于100万行,我们可以导入Excel,然后以CSV或制表符分隔的形式导出并导入到SQL Server。 或者,如果它超过100万条记录,我们可以导入Ms Access 2007/2010并导入回SQL(假设数据不超过2GB)。这些类型的解决方案很好用!!!

是否有直接针对SQL的解决方案?我们仍在使用Ms SQL Server 2005 BTW。我们问的原因是因为Ms的大小限制为2GB,我们有数据超过2GB!当然,我们可以根据行数拆分这个文件但我们发现非常混乱。

期待输入。

谢谢

2 个答案:

答案 0 :(得分:0)

由于文件中的三组数据似乎是三个不同的实体(客户,地址,活动),我假设您希望在流程结束时将它们放入三个不同的表中。这意味着无论如何都会分割数据,这只是一个问题,即你在加载过程中的位置。

我的方法是一个小脚本(Python,Perl,PowerShell,无论如何),它将文件分成三个单独的文件。您可以从SSIS包调用脚本,以将所有工作流保存在一个位置。之后,您只需在包中添加三个连接器,然后将数据加载到您想要的任何表中。

答案 1 :(得分:0)

你可以做到,但它很复杂,我能做的最好的事情就是指出你正确的方向。它涉及使用类型为source的脚本组件和指向每个不同目标的条件分割。脚本组件将读取数据并创建源行。正是这样做,它创建了一个名为“RowType”的额外列,将由条件拆分对象使用。

希望有所帮助,祝你好运!