从文本文件中将不同数量的字段导入MS SQL

时间:2013-11-20 19:59:10

标签: sql sql-server sql-server-2008

我正在尝试将文本文件导入到包含其他字段的表中,我需要同时填充这些字段。字段是trans_type_code(varchar),raw_record_status(varchar),import_file_id(int)和import_file_line(int)。前三个字段对于每个导入的记录不会改变,但第四个字段显然会改变。我正在执行存储过程以从VBS导入数据,只传递import_file_id。

我首先考虑使用BULK INSERT和FORMATFILE为导入的文本指定目标字段,但我无法弄清楚如何同时填充其他字段。我也不知道如何从导入文件中获取行号。

我创建了一个使用批量插入到临时表的进程,然后从临时表中选择要插入到import_raw_records中以填充上面列出的前四个字段,但并非所有导入记录都具有相同数量的字段。如果我使用导入数据的最大可能字段数创建临时表,则文本文件中的数据最终会填满每个字段,而不会根据我正在使用的ROWTERMINATOR = \ n包装到下一条记录。只导入四个字段的记录将在一个记录中填充临时表中的20个字段,而不是在临时表中创建五个单独的记录。

我确认导入文件中的CRLF确实是0D0A。这是导入数据的代码: set @sqlcmd = ' BULK INSERT #temp_import_records FROM ''' + @import_file + ''' WITH ( ROWTERMINATOR = ''\n'' ) '

处理此问题的最佳方法是什么?我应该以不同的方式接近这个吗?我不是一个新手,但我仍然有很多东西要学习SQL。感谢您阅读本文,希望您能提供帮助。

谢谢, 约翰

1 个答案:

答案 0 :(得分:0)

是的,我会将数据加载到临时表中,该表具有足够的列以适应最宽的记录。然后,您可以使用SQL将数据从那里移动到目标表。

请注意,“BULK INSERT”不处理转义字符,因此如果您保存一个包含嵌入换行符的单元格,Excel将处理它,但“BULK INSERT”会将其视为记录分隔符并插入2行。