导入多格式分隔文件



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

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似乎没有任何内置功能。所以我想听听如何处理这个问题的建议。

现在我认为我应该创建一个自定义SSIS源组件。也许这种自定义方法将允许我定义一个文档类型属性,指示我要导入的文档类型(#1、#2或#3),然后我的自定义C#代码将完成繁重的工作。

这是个好办法吗?有更好的方法吗?我很擅长C#。

太长,无法进行注释。

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

例如,一个文件用于#1,一个用于#2,等等。我给出这个建议的原因是,在任何给定的表中只插入一个文档类型(如标题所述)。因此,在导入时,最好只在文件中插入表所需的数据。事实上,我想不出一种干净的方式来做这件事。因此,您需要将文件1导入Table1,将文件2导入Table2,依此类推。

值得注意的是,如果不希望使用SSIS,则不必为此使用SSIS。

通常,我用BULK 作为行加载

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

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

最新更新