我BULK INSERT用来导入CSV文件。CSV文件中的一列包含一些包含分数的值(例如1m陆f)。
BULK INSERT
1m陆f
我不需要对分数进行任何数学运算,因为这些值仅用于显示目的,因此我将列设置为nvarchar。是BULK INSERT可行的,但是当我查看SQL中的记录时,分数已用美分(垄)代替,因此显示的文本是1m垄f。
nvarchar
垄
1m垄f
我有兴趣了解为什么会发生这种情况,以及对如何解决此问题的任何想法。该BULK INSERT命令是:
BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );
您需要BULK INSERT使用CODEPAGE = 'ACP',它将字符串数据从Windows代码页1252转换为SQL Server代码页。
CODEPAGE = 'ACP'
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'。
DATAFILETYPE = 'char|native|widechar|widenative'