我一直在面对一个问题几个小时,而且我似乎无法摆脱这个问题。从OPENROWSET(BULK ...)中进行选择更改特殊字符
所以我有一个SQL Server数据库2008 R2,排序SQL_Latin1_General_CP1_CI_AS。 里面有一个表,其中有一个名为incoming_name的字段。该字段的排序规则也是SQL_Latin1_General_CP1_CI_AS,它是一个NVARCHAR(255)。
我有一个大约123000行的.csv文件。这是一个基本的csv,文本周围没有双引号,但在字段内没有逗号,所以当我运行手动导入到我的数据库时,它工作正常。 incoming_name字段包含所有类型的文本,但不能超过255个字符。并在几行有法国口音(如'Ch * * teau d'Agassac')。
现在我尝试使用代码
select
test_file.[INCOMING_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
as [INCOMING_NAME]
, test_file.[PRODUCT_CODE] AS [PRODUCT_CODE]
FROM
OPENROWSET(
BULK 'INSERT PATH OF THE .CSV HERE',
FORMATFILE = 'INSERT PATH OF THE FORMAT FILE HERE',
FIRSTROW = 2
) AS test_file
随着格式文件
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR=',' MAX_LENGTH="255" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
<FIELD ID="29" xsi:type="CharTerm" TERMINATOR='\r\n' />
</RECORD>
<ROW>
<COLUMN SOURCE="4" NAME="INCOMING_NAME" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="29" NAME="PRODUCT_CODE" xsi:type="SQLNVARCHAR"/>
</ROW>
的导入工作正常,我也得到我的所有数据,并在正确的价值观正确的领域,除了口音...
例如,当我添加where test_file.incoming_name like '%agassac%'
在我的查询结束时,我在我的数据库中得到类似'Château d'Agassac'的结果而不是原始数据'Châteaud'Agassac'。
我不明白的是,我觉得在这个过程的每一步,我选择了一个带有unicode数据类型(NVARCHAR)的区分变音的排序规则,所以我真的不明白为什么导入不符合'不要选择口音。
感谢您阅读这个长长的问题,
约翰。
编辑:好的,它看起来像我想导入的.csv文件编码与utf-8,并且SQL Server 2008不想支持utf-8导入。现在我不知道该怎么做。任何想法的欢迎...
您是否尝试设置'codepage'? –