SQL Server大容量导入行终止符vbCrLf(\n)不工作

SQL Server大容量导入行终止符vbCrLf(\n)不工作,sql,sql-server,Sql,Sql Server,我知道这里还有其他关于这个问题的线程,建议的修复程序都不起作用。我已验证每条记录末尾的CRLF为十六进制“0D0A”。我可以在vbCrLf上的VBS中进行替换,它会替换其中的每一个 以下是我的制表符分隔文本文件示例: 01/16/2013 11:00 HS01 DocLast, DocFirst PA-C Occurred ML 11/20/2012 15:31 01/07/2013 09:40 HS01 DocLast, DocFirst PA

我知道这里还有其他关于这个问题的线程,建议的修复程序都不起作用。我已验证每条记录末尾的CRLF为十六进制“0D0A”。我可以在vbCrLf上的VBS中进行替换,它会替换其中的每一个

以下是我的制表符分隔文本文件示例:

01/16/2013  11:00   HS01    DocLast, DocFirst PA-C  Occurred    ML  11/20/2012  15:31       
01/07/2013  09:40   HS01    DocLast, DocFirst PA-C  Canceled    ML  11/20/2012  15:36   Patient Canceled    20130103-57935
我正在对SQL Server 2008中存储过程中的文本文件执行以下代码:

set @sqlcmd = '
BULK INSERT #temp_import_records
FROM ''' + @import_file + '''
WITH
(
ROWTERMINATOR = ''\n''
)'
我正在尝试将此文本插入一个包含20列的临时表中。此数据只有10个字段。在我的代码中,这两条记录都被安装到temp表中的同一条记录中。我已尝试将行终止符设置为“0D0A”和“0x0A”,但这两个选项都不起作用

我做错了什么?

字符\n只是两个字符CR+LF 0D0A行终止符的LF 0A部分。对第一部分使用\r:

 ROWTERMINATOR = ''\r\n''
\n字符只是两个字符CR+LF 0D0A行终止符的LF 0A部分。对第一部分使用\r:

 ROWTERMINATOR = ''\r\n''

我也建议这样避开终止:

ROWTERMINATOR = ''\\n''

我也建议这样避开终止:

ROWTERMINATOR = ''\\n''

对于现在在这里登陆的任何人,你可以尝试使用十六进制代码


ROWTERMINATOR='0x0d0a'或ROWTERMINATOR='0x0a'

对于现在在这里登陆的任何人,都可以尝试使用十六进制代码


ROWTERMINATOR='0x0d0a'或ROWTERMINATOR='0x0a'

我建议将其加载到一个包含10个字段的临时表中,然后从该表中选择到最后一个表temp\u import\u records中。问题是,我正在将多个文件导入到该临时表中,但并非所有文件都有10个字段。我使用select查询获取这个临时表的内容,并将数据与其他数据一起导入到一个永久表中。大容量插入不允许我将其他数据与导入的数据混合,因此我必须使用此两步过程。+1。问得很好。这个TSV文件的编码是什么?如果这是ANSI编码,您可能需要在批量插入命令中指定CODEPAGE='ACP'。@DavidR,当我在记事本++中打开文件时,编码是UTF-8,不带BOM表。我不知道这是否会产生影响-可能会产生干扰,但我的过程是,VB脚本读取特定的文件属性大小、行数,然后执行SQL存储过程。我建议将其加载到一个临时表中,正好包含10个字段,然后从该表中选择到最终的表中,temp_import_记录。问题是,我正在将多个文件导入此temp表,但并非所有文件都有10个字段。我使用select查询获取这个临时表的内容,并将数据与其他数据一起导入到一个永久表中。大容量插入不允许我将其他数据与导入的数据混合,因此我必须使用此两步过程。+1。问得很好。这个TSV文件的编码是什么?如果这是ANSI编码,您可能需要在批量插入命令中指定CODEPAGE='ACP'。@DavidR,当我在记事本++中打开文件时,编码是UTF-8,不带BOM表。我不知道这是否会产生影响——可能是干扰,但我的过程是VB脚本读取特定文件属性大小、行数,然后执行SQL存储过程。我也尝试过。当我这样做时,我将两条记录导入temp表中的一条记录中。我也尝试过这样做。当我这样做时,我会将两条记录导入临时表中的一条记录。你是我的英雄伙伴你是我的英雄伙伴