Есть ли способ избежать двойной кавычки в текстовой квалифицированной строке при импорте SSIS Csv?

У меня есть CSV, который я пытаюсь импортировать в SQL, используя пакеты служб SSIS через код. Линия может выглядеть примерно так

321,1234,"SOME MACHINE, MACHINE ACCESSORIES 1 1/2"" - 4"""

в этом примере они используют двойную кавычку для обозначения дюймов. Они пытаются избежать двойной цитаты дюймов с двойной цитатой. Однако SSIS не уважает этот эскапизм и терпит неудачу.

есть ли в любом случае я все еще могу использовать символ двойной кавычки для дюймов и избежать его в цитируемом тексте?

много предлагается заменить двойную кавычку двумя одинарными кавычками. Это единственная работа или я могу использовать какую-то другую технику побега?

Я видел, как люди говорят об использовании преобразования производного столбца, но в моем случае SSIS терпит неудачу на шаге источника плоского файла, и поэтому я не могу перейти к шагу преобразования производного столбца.

в настоящее время я запускаю задачу скрипта в потоке управления, непосредственно перед потоком данных, чтобы управлять Csv с помощью некоторых регулярных выражений для очистки данные.

Мне нужно, чтобы строка была текстом с 2 внешними двойными кавычками из-за потенциальных запятых в столбце описания.

что я могу сделать с двойными кавычками в текстовой строке?

5 ответов


Вау, я ожидал, что смогу ответить "просто установить квалификатор текста", но подумал, что вы уже пробовали это, поэтому я попробовал это, прежде чем ответить. Сюрприз, SSIS не поддерживает стандартные CSV-файлы!

похоже, это распространенная жалоба. Там есть один комментарий от Microsoft о некоторых образцах, которые могут помочь;вот проект codeplex, они упомянули, что образец источника плоского файла регулярного выражения и разделенные Образец источника чтения файлов, в частности, может помочь-я предполагаю, что разделенный читатель файлов будет более полезным.


вчера я столкнулся с подобной проблемой.

мы получили csv-файл, который использует запятую , как разделитель и двойная кавычка " как текстовый классификатор, но есть поле, содержащее двойную кавычку внутри двойной кавычки (не экранированная двойная кавычка внутри строки).

потратив полдня на поиск, придумал решение ниже:

// load the file into a one dimensional string array.
// fullFilePath is the full path + file name.
var fileContent = File.ReadAllLines(fullFilePath);

// Find double quotes within double quotes and replace with a single quote
var fileContentUpdated = fileContent.Select(
    x => new Regex(@"(?<!^)(?<!\,)""(?!\,)(?!$)"
    ).Replace(x, "'")).ToArray();

// write the string array into the csv file.
File.WriteAllLines(fullFilePath, fileContentUpdated);

Я не вижу другого способа, кроме как заменить двойную цитату чем-то другим, чтобы избежать проблемы.


этот ответ не применим к 2005, как указано здесь, но в случае, если кто-то сталкивается с этим во время поиска и использует 2008, этот другой вопрос, похоже, имеет рабочий ответ: SSIS 2008 и Undouble


существует обходной путь, если в соединении с файлом вы удалите " как текстовый классификатор вы можете удалить все двойные кавычки позже с помощью производного выражения столбца REPLACE(Item_Name,"\"",""). Недостатком является то, что вам нужно будет делать это для каждого поля


вероятно, старые новости сейчас, но эта проблема была исправлена в SQL Server 2012. Я смог импортировать тот же файл на сервере 2012, который не удался на моем сервере 2008.