Подтвердить что ты не робот

Экспорт данных из SQL Server Express в CSV (требуется кавычки и экранирование)

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

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

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

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

4b9b3361

Ответ 1

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

В окне запроса, которое вы хотите сохранить, перейдите в раздел Query → Query Options...

Установите флажок "строки цитаты, содержащие разделители списков при сохранении результатов .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"

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

Ответ 2

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

  • Я остановил свою таблицу в Express, выполнив инструкцию SELECT *
  • Просто выберите результирующие строки и Ctrl + C
  • Открыт Excel
  • Выделил количество столбцов, в которые вставлял таблицу,
  • Вставлено, и это friggin 'работает!
  • Теперь просто нужно экспортировать Excel в CSV и сделать.

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

Ответ 3

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

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

  • Перейдите к Data > From Other Sources > From Sql Server
  • Введите имя сервера и т.д.
  • Выберите таблицу или представление, которое вы хотите импортировать.

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

Ответ 4

Вот сущность script, которую я использую для этого:

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")

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

Ответ 6

Мне любопытно, почему никто не предложил использовать 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).

Ответ 7

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

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

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

Установите определитель текста как "

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

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

Ответ 8

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

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

Ответ 9

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

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

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

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

Ответ 10

Мы сделали небольшой script, чтобы преобразовать SSMS "сломанный" CSV в правильный CSV, найти его в этом ответе:

fooobar.com/info/55412/...