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

Как получить выходные данные экспорта в "реальном" формате CSV в SQL Server Management Studio?

У меня есть запрос, который я выполняю в SQL Server Management Studio (подключение к базе данных SQL Server 2005). Я хочу экспортировать данные в формате CSV. Не в формате CSV, где вы просто вставляете запятую между каждым столбцом, а в "реальном" формате CSV, где вы помещаете кавычки вокруг строк. Таким образом, вы можете экспортировать данные, которые содержат запятые или кавычки.

Все примеры, которые я вижу, ограничиваются форматом wannabe. Я не могу понять, где находится опция цитирования строк.

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

4b9b3361

Ответ 1

В SSMS 2012 есть опция для этого: в Инструментах → Параметры → Результаты запроса → SQL Server → Результаты для сетки, он называется "Строки счисления, содержащие разделители списков при сохранении результатов .csv". Я не знаю, как долго существовал такой вариант, но я озадачен двумя вещами:

  • По умолчанию он не включается
  • Как это сделать, а не неотъемлемой частью кода экспорта CSV

Он просто не верит в то, что поведение по умолчанию заключается в том, что экспорт CSV невозможно импортировать должным образом. Я заметил, что Excel делает то же самое, мне нужно будет посмотреть, есть ли у него вариант.

Между тем, благодаря моему коллеге, который указал мне на эту странную функциональность, когда я рассказывал о том, как экспортер CSV был совершенно бесполезен, и это была лучшая связь, которую я нашел, поэтому я думал, что я "Дайте знания здесь для будущих поисковиков.

ОБНОВЛЕНИЕ

Снимок экрана ниже: введите описание изображения здесь

Ответ 2

Мой обычный обходной путь - встроить его в запрос:

SELECT '"' + REPLACE(CAST(column AS NVARCHAR(4000)), '"', '""') + '"' AS Header, ... FROM ...

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

Ответ 3

Различные комбинации этих настроек могут привести к результатам, которые являются неправильными или частичными данными. Это связано с тем, что Microsoft не думала, что это достаточно важно, чтобы исправить эти проблемы. Я только объясняю, что происходит с CSV файлами при отправке результатов в файл.

Чтобы получить хорошие результаты, сделайте следующее:

Откройте новое окно запроса (новая вкладка/сеанс)... если вы этого не сделаете, конфигурация ниже потеряна и вернется к значениям по умолчанию

Напишите запрос для обработки цитаты внутри цитаты, а также завершите все строковые типы данных в кавычках. Также имейте в виду, что разные СУБД и грамматики языка программирования принимают другой синтаксис для скрытой двойной кавычки (если использовать этот вывод в качестве входа в другую систему). Некоторые используют \". Некоторые используют "". XML использует ". Вероятно, Microsoft предпочла игнорировать эту функциональность, поэтому им не приходилось иметь дело с аргументами.

.. Если Escape Sequence новой системы "".

SELECT '"' + REPLACE(CAST(column1 AS VARCHAR(MAX)), '"', '""') + '"' FROM table1

.. Если Escape Sequence новой системы \".

SELECT '"' + REPLACE(CAST(column1 AS VARCHAR(MAX)), '"', '\"') + '"' FROM table1

Конфигурация:

Параметры запросa > Результаты > "Включить заголовки столбцов при копировании или сохранении результатов" отмечен

Параметры запросa > Результаты > "Строки с разделителями списков при сохранении результатов .csv" - BROKEN; НЕ ИСПОЛЬЗУЙТЕ!

Параметры запросa > Результаты > другие не отмеченные

Параметры запросa > Результаты > Текст > запятая (настройка в верхнем правом углу)

Параметры запросa > Результаты > Текст > "Включить заголовки столбцов в результирующем наборе" отмечен

Параметры запросa > Результаты > Текст > другие сняты флажки

Параметры запросa > Результаты > Текст > "Максимальное количество символов, отображаемых в каждом столбце" - установите максимальную длину, чтобы строки не усекались.

Запроs > Результаты в файл (это переключатель между всеми 3 параметрами)

Выполнить запрос (F5)

Запрос имени файла отчета

Откройте файл для просмотра результатов

ПРИМЕЧАНИЕ. Если вам нужно делать это на регулярной основе, вам лучше просто разрабатывая программу, которая сделает это для вас в .NET или Java, или на каком бы языке вы ни находились. В противном случае у вас есть высокая вероятность ошибки. Тогда будьте предельно осведомлены о синтаксис импортируемой системы, прежде чем вы экспорт из SQL Server.

Ответ 4

Как вы относитесь к Экспорт в CSV из SSMS через PowerShell? В этом сообщении описывается, как определить внешний инструмент в SSMS, который отправляет текущий выбранный запрос в PowerShell script, который экспортируется в CSV.

Ответ 5

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

  1. Выберите "Задачи> Экспорт данных" из контекстного меню БД (также не работает на уровне таблицы)
  2. В качестве источника выберите "Поставщик Microsoft OLE DB для SQL Server".
  3. Для пункта назначения выберите "Плоский файл..." и укажите "Формат" в качестве разделителя, а text qualifier спецификатор в двойных кавычках.
  4. Выберите таблицу или запрос (я работал с запросом)
  5. Завершить работу мастера

тебе должно быть хорошо идти!

Ответ 6

Я не знаю, как это сделать с SSMS. Я знаю, что TOAD (http://www.toadworld.com/) имеет параметр CSV. Не уверен, что это экранированный формат. Если SSIS является опцией, вы можете преобразовать в формат, который избегает строк (true CSV), но это не относится к SSMS.

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

Ответ 7

Обычно я использую такую ​​функцию:

CREATE FUNCTION [dbo].[toExport]
(
    @txt varchar(max)

)
RETURNS varchar(max)
AS
BEGIN

    return REPLACE(REPLACE(REPLACE(@txt, ';', ','), CHAR(10), ' '), CHAR(13), ' ');

END

И в выборе, я ставлю его здесь:

SELECT dbo.toExport( column_name ) AS column_name FROM ....

И в SMSS 2012 просто щелкните правой кнопкой мыши на сетке и сохраните результаты как, или скопируйте всю сетку (ctrl-A) и ctrl-V в Excel.

Самый простой способ управления данными, например MS Excel, без проблем с столбцами.

Конечно, вы должны нажать "Строки, содержащие разделители списков при сохранении результатов .csv" в Инструменты → Параметры → Результаты запроса → Сервер Sql → Результаты для сетки и увеличить максимальные символы. p >

Ответ 8

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

Ответ 9

Поскольку все упомянутые выше настройки не исправили CSV, мой SSMS (SQL Server 2014), сгенерированный и экспортирующий файл с разделителями, не улучшил его, коллега и я сделали конвертер script (Ruby ) для преобразования CSV SSMS в читаемый CSV. Он хранит кодировку, разделители и строки в исходном файле и даже выполняет точный байт-валидация в конце (он создает файл в формате SSMS из синтаксического (!) Входного файла и сравнивает оба файла).

https://gist.github.com/gr8bit/62202ea89a7e3aff67df2ff080ee8e88

Свяжитесь со мной в github, если вы столкнулись с ошибками, пожалуйста. Ура!

Ответ 10

Я думаю, что проще всего открыть Excel и импортировать данные из SQL-соединения, а не использовать экспорт SSMS.... Я использую SSMS 2016, и у него нет опции "Цитировать строки, содержащие разделители списков, при сохранении результатов .csv" по-видимому, потому что это не работает

Рон