2014-08-29 4 views
0

У меня есть файл csv, который я пытаюсь импортировать, используя BULK INSERT. Проблема в том, что в файле есть поле, которое будет указано (с двойными кавычками), если в тексте есть запятая (не цитируется, если нет запятой). Существование дополнительной запятой вызывает SQL Server, чтобы выкидывать ошибки из-за неправильного количества столбцов во время вставки.sql server условная замена данных csv

Вот набор выборки данных:

928 Riata Dr,Magnolia,TX,77354,4/15/2014 
22 Roberts Ave.,McKinney,TX,75069,4/15/2014 
"5531 Trinity Place, #22",San Antonio,TX,78212,4/15/2014 

Как видно, третья строка содержит запятую внутри поля адреса, таким образом, поле адреса указано. Так как команда BULK INSERT бросает ошибки из-за этого, я предполагаю, что мне нужно будет очистить содержимое файла, прежде чем пытаться его загрузить.

Если кто-то имеет лучшее решение

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

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

Я думаю, что логика звучит, проблема в синтаксисе. Я не могу найти синтаксис, связанный с REGEX в SQL Server (Booo Microsoft). Это означает, что мне понадобится другой способ определить, появляется ли запятая в кавычках, и замените ее, если это так.

Любые мысли, предложения, код и т. Д.?

Заранее спасибо.

ответ

0

Это звучит слишком просто на первый взгляд, но если вы можете просто заменить запятую, можете ли вы открыть csv, скажем, в Excel или OpenOffice Calc, а затем заменить find (запятые ничего)? Я просто попробовал с моим csv, и все получилось отлично. Csv остается правильно разграниченным.

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

Возможно, вам придется попробовать разграничить что-то, кроме запятых, например, вкладки или т. Д. Я должен был сделать это с использованием импорта SQL ранее. Во многих случаях вы можете сохранить в виде txt-файла с разделителями табуляции и загрузить в SQL.

Обратите внимание, что использование Excel для этого типа вещей может быть его собственной проблемой. Для получения справки по Excel и табуляции с разделителями SQL см. Мой ответ here.

+0

благодарит за ваш быстрый ответ. Я пытаюсь сделать это программно для автоматизации. Это будет ежедневная задача, которую я не хочу выполнять вручную. Ваше решение будет работать; однако я не хочу, чтобы каждый день касался каждого файла каждый раз. – sadmicrowave

+0

А, я вижу, я полностью понимаю. Самый последний ответ на сообщение, подобное этому в SO, заключается в том, что нет ответа, кроме, например, импорта с разделителями табуляции и т. Д. Http://stackoverflow.com/questions/21226107/sql-server-bulk-insert-csv -with-data-having-comma, потому что SQL напрямую не поддерживает файлы CSV :(Это говорит о том, что может быть какой-то другой ответ. Если по какой-то причине вниз вы решите внедрить какое-то решение .NET для этого, у меня есть имел недавний успех с читателем LumenWorks CSV. Кроме этого, я не уверен, какую помощь я могу быть. – JackArbiter