28

我正在使用BULK INSERT导入 CSV 文件。CSV 文件中的一列包含一些包含分数的值(例如1m½f)。

我不需要对分数进行任何数学运算,因为这些值仅用于显示目的,因此我将列设置为nvarchar. 可以,BULK INSERT但是当我在 SQL 中查看记录时,分数已被替换为分号 ( ¢),因此显示的文本为1m¢f.

我有兴趣了解为什么会发生这种情况以及有关如何解决该问题的任何想法。BULK INSERT命令是:

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );
4

1 回答 1

51

您需要BULK INSERT使用CODEPAGE = 'ACP',它将字符串数据从 Windows 代码页 1252 转换为 SQL Server 代码页。

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP');

如果要在足够新的 SQL Server 版本上引入 UTF-8 数据:

[...] , CODEPAGE = '65001');

您可能还需要指定DATAFILETYPE = 'char|native|widechar|widenative'.

于 2012-12-21T21:22:51.970 回答