2

我已经面临一个问题几个小时了,我似乎无法理解这个问题。

所以我有一个 SQL Server 数据库 2008R2,排序规则 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âteau d'Agassac”。

我不明白的是,我觉得在这个过程的每一步,我确实选择了一个区分重音的排序规则,使用 unicode 数据类型(NVARCHAR),所以我真的不明白为什么导入不选择重音.

感谢您阅读这个长长的问题,

约翰。

编辑:好的,看起来我要导入的 .csv 文件是用 utf-8 编码的,而 SQL Server 2008 不想支持 utf-8 导入。现在我不知道该怎么办。欢迎任何想法...

4

1 回答 1

0

我认为将widenative添加为DATAFILETYPE应该可以解决该问题。有关详细信息,请参阅此链接:http: //msdn.microsoft.com/en-us/library/ms189941.aspx

于 2013-07-22T19:07:04.410 回答