0

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

  1. XYZ0000746263.txt
  2. XYZ0000746269.txt
  3. 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 表中。怎么可能呢?

4

1 回答 1

0

您可以尝试:

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

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

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

于 2013-06-18T07:45:28.580 回答