Необходимо экспортировать поля, содержащие переносы строк, в виде CSV из SQL Server - PullRequest
27 голосов
/ 14 февраля 2010

Я выполняю запрос из SQL Server Management Studio 2005, в котором HTML-файл хранится в виде строки, например ::

SELECT html 
FROM table 

Этот запрос красиво отображается в окне «Результаты», то есть каждая строка содержит строку всего HTML-файла, по одной записи на строку.

Однако, , когда я использую опцию «Результаты в файл», он экспортирует его как непригодный CSV с разрывами строк в CSV, возникающими везде, где разрывы строк происходят в поле (то есть в HTML) , а не по одному в строке по мере необходимости. Я попытался поэкспериментировать с Query> Query Options для результатов «Сетка» и «Текст», но безрезультатно. Поля, экспортируемые в CSV , не , по-видимому, заключены в кавычки.

Некоторые идеи:

  1. Возможно ли добавить кавычки с SQL?

  2. Есть ли какой-нибудь T-SQL, эквивалентный С командами CSV HEADER, которые возможно на других диалектах?

Ответы [ 9 ]

24 голосов
/ 14 февраля 2010

Я не вижу, где вы будете иметь большой успех при экспорте html в csv - это действительно не то, для чего предназначен csv. Вам лучше использовать формат xml, где HTML-код может быть заключен в элемент cdata.

Тем не менее, вы можете попробовать использовать функцию Replace для удаления разрывов строк, и вы можете вручную добавить кавычки - что-то вроде этого:

select '"' + replace (replace (html, char(10), ''), char(13), '') + '"'

Если в вашем html-значении могут быть двойные кавычки, вам нужно их избежать.

19 голосов
/ 12 февраля 2015

Если вы используете Visual Studio, Server Explorer является альтернативным решением. Вы можете правильно скопировать и вставить результаты из своей сетки.

17 голосов
/ 04 июля 2012

Согласно , наиболее близкому к стандарту, который мы имеем , правильно отформатированный CSV-файл должен заключать в кавычки поля, содержащие либо разделитель (чаще всего ; или ,), либо разрыв строки.

SQL Server Management Studio может сделать это, но удивительно, что по умолчанию эта опция не включена. Чтобы включить, перейдите к Инструменты → Параметры → Результаты запроса → Результаты в сетку и отметьте «Цитировать строки, содержащие разделители списков, при сохранении результатов .csv»

10 голосов
/ 22 января 2016

Я знаю, сколько ему лет, но я нашел это и другие тоже. Возможно, вы захотите пойти дальше и ответить на вопрос Мартина ван Хофа и убрать возможные вкладки (символ (9)) в дополнение к возврату каретки (13) и переводу строки (10).

SELECT REPLACE(REPLACE(REPLACE(mycolumn, CHAR(9), ''), CHAR(10), ''), CHAR(13), '') as 'mycolumn' FROM mytable
7 голосов
/ 06 мая 2015

столбец с переносами строк: "mycolumn"

SELECT REPLACE(REPLACE(mycolumn, CHAR(13), ''), CHAR(10), '') as `mycolumn` FROM mytable

Это заменяет переносы строк.

6 голосов
/ 31 декабря 2015

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

 SELECT html
 From table
 For Xml Auto, Elements, Root('doc') 

он должен выплевывать xml, а затем вы можете импортировать этот XML в Excel

3 голосов
/ 20 мая 2016

нашел это полезным, но я все еще сталкивался с проблемами, так как мое поле было текстовым шрифтом, поэтому я преобразовал текст в varchar(8000) и выше, замещение работает как шарм

REPLACE(REPLACE(CAST([TEXT FIELD] AS VARCHAR(8000)), CHAR(10), ' '), CHAR(13), ' ') AS 'Field Name',
2 голосов
/ 16 августа 2016

Инструмент для импорта и экспорта данных SQL Server, FTW!

Пуск -> Программы -> Microsoft SQL Server -> Импорт и экспорт данных

Пример запроса:

select *
from (
select 'Row 1' as [row], 'Commas, commas everywhere,' as [commas], 'line 1
line 2
line 3' as [linebreaks]

union all 

select 'Row 2' as [row], 'Nor any drop to drink,' as [commas], 'line 4
line 5
line 6' as [data]
) a

Выход CSV:

"row","commas","linebreaks"
"Row 1","Commas, commas everywhere,","line 1
line 2
line 3"
"Row 2","Nor any drop to drink,","line 4
line 5
line 6"

Отказ от ответственности: Возможно, вам придется проявить творческий подход с двойными кавычками в данных. Удачи!

0 голосов
/ 22 марта 2016

Я обошел это ограничение, создав базу данных Access, используя функцию «Связать с источником данных путем создания связанной таблицы», открыв «связанную» таблицу, а затем скопировав / вставив в Excel оттуда. Excel может сохранять данные CSV по мере необходимости. Вы также должны иметь возможность подключаться напрямую из Excel, но функция «связанных таблиц» в Access позволяет довольно быстро настроить несколько таблиц одновременно.

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