我正在尝试将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 ++'来自何处?
答案 0 :(得分:4)
似乎SQL Server 2005和2008不支持UTF-8文件,它只能在版本11中使用!
答案 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。当然,当您键入命令时,请不要包含引号。