使用t-sql批量插入时出现意外字符

时间:2014-04-01 10:22:37

标签: tsql

我使用报告工具,需要在sql中加载文本文件。但我有一个问题。我搜索过,但无法找到答案。我尝试了一些方法,但问题存在。 所有txt文件都使用utf编码。

我使用t-sql的批量插入语句存在。

IF OBJECT_ID ( 'dbo.tableName','U') IS NOT NULL
DROP TABLE dbo.tableName
CREATE TABLE tableName ( line nvarchar(50) );
BULK INSERT dbo.tableName from 'file_with_path.txt'
WITH ( ROWTERMINATOR='\n' ) 
select * from dbo.tableName

最后我得到了这些行

enter image description here

(对不起!但我无法上传图片。我没有声誉:()

出了什么问题?

注意:我也在列中尝试了数据类型 varchar,text ...但结果是相同的

2 个答案:

答案 0 :(得分:0)

尝试使用ACP转换:

BULK INSERT dbo.tableName from ''
WITH ( ROWTERMINATOR='\n',   CODEPAGE = 'ACP' )

答案 1 :(得分:0)

我找到了答案。问题来自不支持utf-8的openrowset。 我直接使用临时表批量插入,现在我可以读取utf-8编码文件没有问题。以下是可能存在同样问题的人的代码

CREATE TABLE #temp
(
    lines nvarchar(max) NULL
)
BULK INSERT #temp
FROM 'c:\my\test.txt'
WITH(ROWTERMINATOR = '', CODEPAGE='65001')
SELECT * FROM #temp
DROP TABLE #temp

代码页65001是UTF-8 文件text.txt使用utf-encoding