批量插入期间会出现其他字符

时间:2010-12-14 04:57:00

标签: sql sql-server-2005 tsql bulkinsert

我正在尝试将csv文件中的第一行批量插入到只有一列的表中。 但是我在开头就得到了一些额外的字符('n ++'):

n++First Column;Second Column;Third Column;Fourth Column;Fifth Columnm;Sixth Column

CSV文件内容如下:

First Column;Second Column;Third Column;Fourth Column;Fifth Columnm;Sixth Column

您可以找到test.csv文件here

这是我用来获取表格中第一行数据的代码

declare @importSQL nvarchar(2000)
declare @tempstr varchar(max)
declare @path varchar(100)  

SET @path = 'D:\test.csv'    

CREATE TABLE #tbl (line VARCHAR(max))

SET @importSQL = 
'BULK INSERT #tbl 
FROM ''' + @path + ''' 
WITH ( 
LASTROW = 1,
FIELDTERMINATOR = ''\n'',
ROWTERMINATOR = ''\n''
)' 

EXEC sp_executesql @stmt=@importSQL 

SET @tempstr = (SELECT TOP 1 RTRIM(REPLACE(Line, CHAR(9), ';')) FROM #tbl)

print @tempstr
drop table #tbl

知道这个额外的'n ++'来自何处?

5 个答案:

答案 0 :(得分:4)

似乎SQL Server 2005和2008不支持UTF-8文件,它只能在版本11中使用!

https://connect.microsoft.com/SQLServer/feedback/details/370419/bulk-insert-and-bcp-does-not-recognize-codepage-65001

答案 1 :(得分:4)

额外字符是由编码引起的。您可以使用用过的记事本将编码格式从UTF-8更改为Unicode。这删除了第一行的'n ++'。

答案 2 :(得分:3)

可能是Unicode Byte Order Mark被拾取。

我建议您尝试将DATAFILETYPE选项设置为语句的一部分。有关更多详细信息,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/aa173832%28SQL.80%29.aspx

答案 3 :(得分:1)

不幸的是,旧的SQL Server版本不支持utf-8。将codepage参数添加到批量插入方法。在您的问题中,请将您的代码更改为存在。

SET @importSQL = 
'BULK INSERT #tbl 
    FROM ''' + @path + ''' 
    WITH ( LASTROW = 1, 
           FIELDTERMINATOR = ''\n'', 
           ROWTERMINATOR = ''\n'' , 
           CODEPAGE=''65001'')'

请注意,您的文件必须采用utf-8格式。 但问题是,如果您将服务器从2005年升级到2008年,则不支持代码页65001(utf-8),然后您将收到“不支持代码页”消息

答案 4 :(得分:0)

在更高版本的SQL Server中,您可以在命令中添加“ -C 65001”,以指示其使用utf-8编码。这将从第一行中删除n ++。那是大写的C。当然,当您键入命令时,请不要包含引号。