Экспорт данных из SQL Server Express в CSV (требуется цитирование и экранирование) - PullRequest
36 голосов
/ 12 сентября 2011

Я потратил 2 дня, пытаясь экспортировать таблицу из 75 000 строк, содержащую большое текстовое поле пользовательских вводимых данных из установки SQL-сервера. Эти данные содержат все простые символы ascii, вкладки и переводы строк. Мне нужно экспортировать CSV, где каждое поле заключено в кавычки, а кавычки в столбцах в кавычках правильно экранированы ("").

Вот что я пробовал до сих пор: - Щелчок правой кнопкой мыши по базе данных из Management Studio и экспорт в Excel: ошибка из-за слишком длинного поля. - Экспорт данных из Management Studio в плоский файл с «разделителем текста и разделением запятыми» - совершенно бесполезен, не содержит кавычек внутри поля, что делает файл совершенно неоднозначным. - BCP из командной строки - также не поддерживает поля цитирования.

Мне нужно импортировать с помощью рубиновой библиотеки FasterCSV. Он не позволяет разделителю кавычек быть нестандартным символом ascii или более чем одним символом. Он также не допускает \ n или \ r в столбцах без кавычек.

Любая помощь очень ценится.

Ответы [ 10 ]

45 голосов
/ 16 июня 2012

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

В окне запроса, которое вы хотите сохранить , перейдите в раздел Запрос -> Параметры запроса...

Установите флажок "заключать в кавычки строки, содержащие разделители списков при сохранении результатов .csv".

enabling quoted csv output

затем

select 'apple,banana,cookie' as col1,1324 as col2,'one two three' as col3,'a,b,"c",d' as col4

выдаст

col1,col2,col3,col4
"apple,banana,cookie",1324,one two three,"a,b,""c"",d"

, чего мы все хотим.

25 голосов
/ 08 декабря 2011

Я тоже пытался это выяснить.Не уверен, что это сработает для вас, так как ваш стол намного больше моего, но я сделал это просто по прихоти:

  1. Я поднял свой стол в Express, выполнив SELECT * Statement
  2. Просто выделены результирующие строки и Ctrl + C
  3. Открыто Excel
  4. Выделено количество столбцов таблицыЯ вставил
  5. Вставлено, и это чертовски сработало!
  6. Теперь просто нужно экспортировать Excel как CSV и готово.

Я знаю, что это звучит глупо, но на самом деле это сработало для меня.

8 голосов
/ 10 декабря 2014

Самый простой способ сделать это:

Использование инструментов импорта данных Excel

  • Перейти к данным> Из других источников> С Sql Server
  • Введите имя сервера и т. Д.
  • Выберите таблицу или представление, которое вы хотите импортировать.

Затем сохраните импортированные данные в файл CSV. Если вы хотите экспортировать запрос, сохраните его как представление

2 голосов
/ 08 декабря 2011

Вот суть сценария, который я использую для этого:

require 'rubygems'
require 'active_record'
require 'tiny_tds'
require 'activerecord-sqlserver-adapter'
require 'acts_as_reportable'
require 'ruport'

ActiveRecord::Base.logger = Logger.new("log/debug.log")
ActiveRecord::Base.establish_connection(
  :adapter    => 'sqlserver',
  :mode       => 'dblib',
  :dataserver => 'servername',
  :username   => 'username',
  :password   => 'password',
  :timeout    => '60000'
)

class Table1 < ActiveRecord::Base
  set_table_name 'table_name'
  set_primary_key 'table_id'
  acts_as_reportable
end

Table1.report_table(:all).save_as("finished/table1.csv")

Надеюсь, это поможет!

1 голос
/ 30 марта 2017

Самое простое решение, которое я нашел, - это добавить в ваш запрос двойные кавычки;

SELECT '"'+MYCHARACTERDATA+'"' FROM MYTABLE

Если ваша электронная таблица позволяет вам использовать пользовательский квалификатор текста, тогда вы можете использовать более экзотический символ, такой как |чтобы избежать двойных кавычек в тексте.

Daft..SSMS следует экспортировать как правильный CSV с текстовыми полями в кавычках и правильно экранированными кавычками в этих полях.

1 голос
/ 07 августа 2014

Мне любопытно, почему никто не предложил использовать SSIS (службы интеграции SQL Server) для этого процесса? Все мастера и инструменты для импорта / экспорта из SSMS (SQL Server Management Studio) абсолютно не предназначены для того, чтобы быть исчерпывающими (и они, конечно же, не являются таковыми, и да, есть много вопросов, за которые Microsoft должна ответить с ограничениями ). Но SSIS - это очень полнофункциональный инструмент ETL, разработанный для решения проблем точно , как этот. Кривая обучения может быть немного крутой, но экспортировать таблицу в CSV-файл с разделителями-запятыми / кавычками не особенно сложно.

Может потребоваться это дополнение для Visual Studio, чтобы иметь среду разработки для создания пакета: http://www.microsoft.com/en-us/download/details.aspx?id=42313 (ссылка для VS 2013, другие ссылки доступны для других версий VS).

0 голосов
/ 22 октября 2017

Мы создали небольшой скрипт для преобразования «сломанного» CSV SSMS в правильный CSV, найдите его в следующем ответе:

https://stackoverflow.com/a/46876236/1532201

0 голосов
/ 07 сентября 2016

Лучшее решение, которое я мог бы придумать, - это выбрать все строки и скопировать их в XML.

Вставить его в файл блокнота и сохранить как файл XML.Затем откройте этот XML-файл из Excel и вуаля!По крайней мере, так, как я получил мой файл.

0 голосов
/ 08 сентября 2015

Решение Роберта Калхуна не сработало для меня. У нас было много текста с запятыми и переводом каретки / переводом строки и т. Д. Мы использовали функцию экспорта с некоторыми изменениями в решении Криса Христодулу, описанном выше.

В SQL Management Studio щелкните правой кнопкой мыши базу данных и выберите Задачи -> Экспорт данных.

Затем выберите SQL Server в качестве источника и Flat File в качестве места назначения. Назовите файл MyFile.csv.

Установить квалификатор Text как "

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

После экспорта данных откройте в Excel и сохраните в формате Excel.

0 голосов
/ 12 сентября 2011

Может быть, следующая ссылка поможет вам:

Импорт / экспорт данных с SQL Server 2005 Express

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