2

Я столкнулся с проблемой в течение нескольких часов, и я не могу показаться, что обманываю ее.SELECT FROM OPENROWSET (BULK ...) смена специальных символов

Итак, у меня есть база данных SQL Server 2008R2, Collation SQL_Latin1_General_CP1_CI_AS. Внутри есть таблица с полем с именем incoming_name. Сопоставление этого поля также является SQL_Latin1_General_CP1_CI_AS, и это NVARCHAR (255).

У меня есть. CSV-файл со 123000 строк. Это базовый 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), поэтому я действительно не понимаю, почему импорт не " t выбрать акценты.

Спасибо, что прочитали этот длинный вопрос,

John.

EDIT: Хорошо, файл CSV, который я хочу импортировать, кодируется с помощью utf-8, а SQL Server 2008 не хочет поддерживать импорт utf-8. Теперь я понятия не имею, что делать. Любая идея приветствуется ...

+0

Вы пытались установить 'codepage'? –

ответ

0

Я думаю, что добавление widenative в DATAFILETYPE должны решить эту проблему. Пожалуйста, обратитесь к этой ссылке для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms189941.aspx

+0

Привет, Сонам, спасибо за ваш ответ. Проблема в том, что я пытался добавить DataFileType = 'widenative', но похоже, что это разрешено только с помощью BULK INSERT TableName FROM 'csv path' WITH (options ...) синтаксис или с помощью команды bcp. Я попытаюсь изменить свой код, чтобы использовать BULK INSERT FROM вместо OPENROWSET. –