Есть ли способ избежать двойной кавычки в текстовой строке при импорте SSIS Csv? - PullRequest
9 голосов
/ 08 июля 2011

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

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

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

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

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

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 08 июля 2011

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

Похоже, что это распространенная жалоба .Там есть один комментарий от Microsoft о некоторых примерах, которые могут помочь; Вот проект codeplex , они упомянули, что пример «Источник плоских файлов регулярных выражений» и, в частности, «Источник с ограничителем чтения файлов» могут помочь.*

3 голосов
/ 17 декабря 2015

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

Мы получили 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);

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

2 голосов
/ 04 ноября 2011

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

0 голосов
/ 20 июля 2018

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

0 голосов
/ 21 октября 2014

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

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