导入多格式分隔文件

时间:2017-10-30 21:14:15

标签: c# sql-server ssis sql-server-2016

我需要将文件导入几个数据库表。该文件包含几种同时格式,如下所示:

901
902|1|Id|Name|Age
902|2|Id|Region|Address
902|3|Id|ProductName|ProductType|Price
903
1||Adam Sandler|40
1||Phil Collins|50
1||Fred Mason|22
2||Southwest|4000 Cactus Ln.
2||Northwest|5000 Seahawk Ln.
3||Surf board|recreation|$30.00

实际上,此文件的“标题”(前缀为'902'的行)表示包含的文档类型(文档类型1,2和3)以及每个文档具有的列名/数量。然后该文件提供实际数据(从'903'指示符开始)。

我需要使用SSIS(SQL Server 2016)来导入数据,但这似乎不是SSIS具有任何内置功能的东西。所以我想听听如何处理这个问题的建议。

现在我相信我应该create a custom SSIS source component。也许这种自定义方法允许我定义一个doc-type属性来指示我想要导入哪个文档类型(#1,#2或#3),然后我的自定义C#代码将完成繁重的工作。

这是一个好方法吗?有更好的方法吗?我对C#非常强大。

2 个答案:

答案 0 :(得分:0)

评论太久了。

在上传之前,我会使用C#或Python或Batch或其他任何东西将它们拆分成自己的文件。

例如,#1的一个文件,#2的一个文件等...我的理由是,您只需要在任何给定的表中插入单个文档类型(如标题所述)。因此,在导入时,最好只包含要插入到文件中的表所需的数据。实际上,我想不出干净的方式。因此,您将文件1导入Table1,将文件2导入Table2,依此类推。

值得注意的是,如果你没有想要,你就不必使用SSIS了。虽然可以使用它。

答案 1 :(得分:0)

通常,我以BULK

的形式加载
    CREATE TABLE #FileContent (Line varchar(2000));
    SET @sql='BULK INSERT #FileContent FROM '''+@FileFullName+'''  WITH (ROWTERMINATOR ='''+CHAR(10)+''')'
    PRINT @sql
    EXEC(@sql)

然后使用split函数将行数据拆分为列 将每个格式行放入不同的表格中。