Есть ли способ избежать двойной кавычки в текстовой квалифицированной строке при импорте 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.