将固定宽度的 UTF-8 文件导入 SQL 2008R2,可变文件名

Posted

技术标签:

【中文标题】将固定宽度的 UTF-8 文件导入 SQL 2008R2,可变文件名【英文标题】:Import fixed width UTF-8 file into SQL 2008R2, variabel file names 【发布时间】:2013-06-18 07:35:38 【问题描述】:

我必须将不同名称的文本文件(如下所示)导入 SQL Server 2008。

    XYZ0000746263.txt XYZ0000746269.txt XYZ0000745860.txt

文件名总是以 XYZ 开头,并且数字总是比之前的文件大。

文件格式为等宽,UTF-8编码。

SHINST 1020130613    
SHINSD0745860182650  940PI67100000           dataw11     2012CH 01002601900100 848CRU        
SHINSD0745860182650  940PI67066900           dataa12     9434CH 00701801400030 848CRU         
SHINSD0745860182650  940PI67160300          adsfaf13     1205CH 04203601000160 848CRU     
SHINSD0745860182650  940PI67171300           data 14     1205CH 01803501200120 848ND1  
SHINSD0745860182650  940PI67079000           asdfs15     8400CH 00702601400040 848ND1    
SHINSD0745860182620  940PI67053900           data 16     6877CH 01904101100130 848ND1    
SHINSD0745860182620  940PI67156100          text  17     3003CH 08906202902460 848ND2    
SHINSD0745860182650  940PI67110700         alskdjf18     1000CH 02603900900130 848ND2    
SHINSD0745860182620  940PI67123900       asfasdffa19     8048CH 01502300900020 848ND2    
SHINSD0745860182650  940PI67066300           data 20     8952CH 01002601900090 848ND2    
SHINSF000012

第一行包含SHINST,然后是文件中的记录数,然后是YYYYMMDD 格式的日期。

记录包含SHINSD,然后是一个 13 位数字,然后是固定宽度的记录。

最后一行包含SHINSF,然后是一个包含文件总行数的六位数字。

我想自动将这种格式的文件导入到 SQL 表中。怎么办?

【问题讨论】:

【参考方案1】:

你可以试试:

BULK INSERT tablename FROM 'c:\File.txt' WITH (FIELDTERMINATOR = ' ')

如果 ' '(空格)是您的字段分隔符。 当然表表名列必须与文件中的列相同(计数和长度)。 您可以创建一个过程并只给它一个文件名路径,如这些exaples

唯一的问题是文件中的第一行和最后一行,因为它们不同,我不知道您是否需要插入 mas。如果你需要忽略它们,也许你需要一个脚本来消除它们。

【讨论】:

我需要每个数据记录行第一行的日期,以了解数据记录何时发送给我。记录集是用固定宽度的数据建立起来的,我可以在这篇文章中以正确的方式展示它。 这可以用 bash 脚本来完成,为BULK INSERT 准备文件,但如果你想在SQL 中完成这一切,我建议你在# 中创建一个过程并转储文件temptable(tempfield(nvarchar(max))) 在里面。您可以进行各种字符串操作,例如 select top 1 和 substing 以将该日期转换为变量,而不是准备插入其余字段并在您想要的字段上添加时间戳... 也许你有一个例子给我,因为我是初学者...... :-)

以上是关于将固定宽度的 UTF-8 文件导入 SQL 2008R2,可变文件名的主要内容,如果未能解决你的问题,请参考以下文章

使用 Powershell 从 SQL Server 2008 R2 导出到固定宽度的文本文件

如何将 UTF-8 平面文件导入 SQL Server 2008 R2?

如何固定一个TD的宽度

批量裁剪图像到固定高度 (CLI)

从固定宽度的平面文件获取数百万条记录到 SQL 2000

MySql WorkBench 导入sql文件 中文出现乱码