Проблема с новой строкой при копировании данных из SQL Server 2012 в Excel

Я недавно обновился до SQL2012 и использую Management Studio. Один из моих столбцов в базе данных имеетCHAR(13) + CHAR(10) хранится в нем.

Когда я использовал SQL Server 2008, это было бы прекрасно скопировать и вставить в Excel. Однако теперь копирование и вставка одних и тех же данных создает новую строку / возврат каретки в данных, которые у меня есть в Excel.

Есть ли параметр, который я пропустил в SQL2012, чтобы решить эту проблему? Я нене хочу простоREPLACE(CHAR(13) + CHAR(10)) на каждый выбор базы данных, как я должен был бы перейти от использованияSELECT * для определения каждого отдельного столбца.

 tofutim10 мая 2013 г., 22:42
Это так хромает.
 tnktnk25 апр. 2015 г., 19:41
Тьфу, это ужасно Я нахожусь под огромным давлением времени, и у меня нет на это времени.
 StayPuft09 сент. 2014 г., 20:51
За что проголосовал - так раздражает ...
 nutsch14 нояб. 2012 г., 22:40
Я повторил ошибку с Management Studio 2008 (без новых строк) и Management Studio 2012 (с новыми строками), используя запросselect top 10 char(10) + char(13) as [struff] from dbo.tbEntries
 Triynko09 апр. 2013 г., 23:07
Это отстой. Мне удалось скопировать тысячи строк с возвратами каретки и без них из SSMS 2008 и идеально вставить их в Excel. Теперь, когда ямы обновлены до SSMS 2012, этоS полностью облажался. SSMS 2012 очень сломан, и опция экспорта в CSV бесполезна в обеих версиях, потому что она совершенно не соответствует спецификации формата файла CSV.
 Triynko09 апр. 2013 г., 23:23
LOL, даже WORSE ... с этой опцией, вместо того, чтобы превращать двойные кавычки в пары двойных кавычек, как указано в спецификации CSV, он преобразует двойные кавычки в две одинарные кавычки. Это совершенно, совершенно неприемлемо ".
 Triynko09 апр. 2013 г., 23:19
В разделе Инструменты> есть опция Варианты> Результаты запроса> Результаты в таблицу> "Строки в кавычках, содержащие разделители списков при сохранении результатов .csv ", Это'ерунда, что эта опция не включена по умолчанию, другими словами, полное нарушение формата файла CSV.
 Derek Kromm15 нояб. 2012 г., 05:06
Так что вы'говоришь, что ты нене хотите, чтобы возврат каретки отображался в Excel, несмотря на то, что он был в данных? Похоже, они просто исправили ошибку с 2008 по 2012 год, если этов этом случае ... если этоДля того, чтобы представить ваши данные, вам нужно манипулировать ими в нужном вам формате.
 Triynko09 апр. 2013 г., 23:08
Формат CSV очень специфичен и учитывает все возможные символы, требуя, чтобы строки с кавычками, запятыми или разрывами строк заключались в двойные кавычки, а реальные двойные кавычки удваивались. SSMS 2012 (и 2008) просто бросает все в файл и вставляет запятые между ячейками, совершенно неряшливо и бесполезно. Независимо от формата 2012, помещаемого в буфер обмена, это очень и очень неправильно, в отличие от SSMS 2008.
 Michael1234530 сент. 2013 г., 00:09
Microsoft направила пользователей к этой проблеме подключения:connect.microsoft.com/SQLServer/feedback/details/735714 Это'S перечислены как и "Активный» известная на данный момент ошибка и MS опубликовали обходной путь, который должен в основном заменить CHAR (10) и CHAR (13) пустой строкой. Это'буду работать но этоЭто не то, что искали ни один из нас.
 MrPink15 нояб. 2012 г., 11:17
@ Дерек Кромм, это именно то, что я говорю. Я собираюсь попробовать установить менеджер сервера 2008 снова и посмотреть, если проблема не исчезнет, если это так, то, скорее всего, это проблема Excel или что-то в этом роде.
 Triynko10 апр. 2013 г., 00:03
Кто-то уже подал отчет об ошибке здесь:connect.microsoft.com/SQLServer/feedback/details/783274/...    Определенно ошибка в SSMS 2012. Я добавил обходной путь, сказав, что просто использую SSMS 2008, и пожаловался на плохую реализацию CSV.
 Tot Zam02 авг. 2017 г., 18:44
Эта статья может помочь:mssqltips.com/sqlservertip/3416/...
 nutsch14 нояб. 2012 г., 22:27
Как копировать и вставлять, просто выберите результаты запроса, Ctrl + C, Ctrl + V?
 dsa4207 окт. 2013 г., 18:46
В этой теме много подписчиков. Любой, кто столкнулся с этой проблемой, должен зайти сюда и проголосовать за нее, чтобы Microsoft выпустила исправление:connect.microsoft.com/SQLServer/feedback/details/735714
 Triynko09 апр. 2013 г., 23:52
RFC 4180: каждая строка или кортеж отделяются переводом строки, а последняя строка может заканчиваться переводом строки. Каждая строка должна содержать одинаковое количество полей, разделенных одним символом, обычно запятой.Поля могут быть заключены в двойные кавычки. Если они есть, то поля могут содержать запятые или символы перевода строки. Они также могут содержать двойные кавычки, если ‘убежали» со вторым соседним символом двойной кавычки. Нулевые значения данных обозначаются двумя разделителями подряд без данных между ними. "

Ответы на вопрос(18)

После экспорта данных в Excel выделите столбец даты и формат в соответствии с вашими потребностями или используйте настраиваемое поле. Работал для меня как шарм!

Это иногда случается с Excel, когда вымы недавно использовалиТекст в столбцы. "

Попробуйте выйти из Excel, снова открыть и вставить. Это обычно работает для меня, но яВы слышали, что иногда вам приходится полностью перезагружать компьютер.

Я думаю, что это не ошибка, а особенность Sql 2012. ;-) В других контекстах вы 'Буду рад сохранить ваш криs, как при копировании большого фрагмента текста. Это'просто это не такне работают в вашей ситуации.

Вы всегда можете раздеть их по своему выбору. Это сделает ваш запрос таким, каким вы собираетесь в обеих версиях:

select REPLACE(col, CHAR(13) + CHAR(10), ', ') from table
 Beytan Kurt14 мая 2015 г., 10:43
Спасибо @RobertFricke, ваши комментарии помогли мне в моем случае.
 Robert Fricke29 апр. 2013 г., 13:30
Я должен был бежатьselect REPLACE(REPLACE(col, CHAR(13), '') CHAR(10), ' ') from table Чтобы убедиться, что ни один \ n или \ r не испортил мой лист Excel
 GoalBased16 мая 2014 г., 23:08
@ Роберт Фрикеselect REPLACE(REPLACE(col, CHAR(13), ''), CHAR(10), ' ') - Вы оставили там запятую.
 AHiggins30 окт. 2014 г., 19:32
@GoalBased, мои нежелательные данные требовали от меня использованияSELECT REPLACE(REPLACE(REPLACE(col, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ') AS Col FROM Table
 Triynko09 апр. 2013 г., 23:15
Эта проблема усугубляется тем, что Excel 'Интерпретация данных в буфере обмена зависит от последнего использованного символа-разделителя для "текст в столбцы " операция. По умолчанию это "\ Т» (вкладка), но проблема сейчас заключается в том, что SSMS 2012 на самом деле изменяет данные в ячейках, преобразовывая их »\р" к "\ Г \ п» в буфере обмена, что очень и очень плохо. Я знаю это, потому что мой клиент на базе Flash сохраняет разрывы строк как\р" (возврат каретки), и когда я вставил эти данные из SSMS 2008 в Excel, он не инициировал запуск новой строки в середине ячейки, как сейчас.
 Jed Schaaf10 мая 2016 г., 00:07
Изменение данных на "сделай так, чтоб это работало" не очень хорошее решение Это'На самом деле это действительно плохое решение. Если новая строка представляет собой значительную часть данных, лучшим решением будет способ заставить копируемую вставку SSMS-Excel поместить данные из столбца, содержащего новую строку, в многострочную ячейку. Рональд'Ответ лучше чем этот из-за этого.

Изменение всех моих запросов, потому что Studio не изменила версиют вариант. Попробовал упомянутые выше настройки безрезультатно. Это неТ кавычки, когда был CR-LF. Возможно, это срабатывает только при запятой.

Копирование-вставка в Excel является основой SQL-сервера. Для Mircosoft либо необходим флажок, чтобы вернуться к поведению 2008 года, либо они должны улучшить перенос буфера обмена в Excel, чтобы ONE ROW РАВНО ОДНА ROW.

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

Видя как это нездесь уже упоминалось, и этоКак я обошел проблему ...

Щелкните правой кнопкой мыши на целевой базе данных и выберитеTasks > Export data и выполните это до конца. Одно из направлений наВыберите пункт назначения экран Microsoft Excel и естьЭто шаг, который примет ваш запрос.

Это'с мастером импорта и экспорта SQL Server. Это'Это намного длиннее, чем простая опция «Копировать с заголовками», которую я обычно использую, но, за исключением случаев, когда вы перепрыгиваете через гораздо больше обручей, когда у вас есть много данных, чтобы превзойти его »достойный вариант.

Я нашел решение этой проблемы; вместо копирования вручную, используйте Excel для подключения к вашей базе данных и импорта всей таблицы. Затем удалите данные, которые вас не интересуют.

Вот шаги (для Excel 2010)

Перейти в менюData > Get external data: From other sources > From SQL ServerВведите имя сервера SQL (и учетные данные, если вы нена вашем сервере должна быть аутентификация Windows) и подключиться.Выберите базу данных и таблицу, содержащую данные с символами новой строки, и нажмите «Конец'.Выберите лист назначения и нажмите «Хорошо'.

Excel теперь импортирует всю таблицу с новыми строками без изменений.

 Triynko30 сент. 2014 г., 19:39
Это'не обходной путь; Это'с решением проблемы. Проблема не впросто SSMS нене работает ... эточто SSMS нет работа,и мне нужно использовать SSMS, Решение, которое предполагает полный отказ от SSMS, вообще не является решением и, конечно, не является обходным решением. Обходной путь может заключаться в том, чтобы сделать что-то иначе в SSMS, например, заменить символы cr-lf другими символами или изменить некоторые параметры, чтобы это работало. Excel»Импорт данных из SQL Server тоже нарушен, но яЯ не вхожу в это.
 Edwin Stoteler29 мая 2015 г., 16:37
@Triynko Если целью является получение данных из таблицы, чтобы преуспеть, то это обходной путь. Черт возьми, написание приложения на c # для этого можно было бы обойти.
 THelper01 июл. 2014 г., 07:59
@Triynko Да, этопочему я это назвалОбходной путь ».
 Jed Schaaf10 мая 2016 г., 00:09
Но что, если "Таблица" Я хочу экспортировать результат запроса вместо таблицы базы данных?
 cjo3008023 сент. 2016 г., 22:21
Отвечая Джеду, я создал новую таблицу специально для того, чтобы воспользоваться этим обходным путем. Как только данные были в Excel, я удалил новую таблицу. (например, SELECT * INTO NewTable ИЗ OriginalTable1 ПРИСОЕДИНЯЙТЕСЬ к OriginalTable2). Спасибо THelper за отличный совет.
 Julie16 нояб. 2016 г., 00:39
Спасибо, спасибо, спасибо - это позволило мне экспортировать объединенные данные в Excel, при этом CR / LF был создан по нетронутому запросу, поэтому я мог затем импортировать их в частную БД. Я'мы потратили много часов на это. Это'это как магия. лол. И спасибо @ cjo30080 за тестирование и Джеду за вопрос.
 Munk18 июл. 2016 г., 20:04
Ух ты удивительный трюк, это, вероятно, сэкономит мне кучу времени в будущем. Спасибо за чаевые!
 Triynko01 июл. 2014 г., 03:50
Другими словами, SQL Server Management Studio 2012 не работает, неиспользуйте его, и просто используйте Excel для импорта данных, оставляя SSMS вне цикла. Тот'это не решение, этопросто восстанавливаю проблему. Очевидно, что существует множество способов получить данные из SQL Server и в Excel. Проблема в том, что SSMS 2012 все портит, чтобы вы моглипросто скопируйте / вставьте данные в Excel, как вы могли бы с SSMS 2008.
 NJS05 авг. 2017 г., 00:08
Если вы хотите экспортировать результат запроса вместо таблицы базы данных: выполните шаги 1, 2, 3 в этом ответе. Это приведет вас кИмпорт данных " диалоговое окно, в котором можно нажать кнопку «ОК», но вместо этого нажать кнопку «Свойства». Это открываетСвойства подключения " диалог, в котором вы можете нажать наОпределение" Вкладка. На этой вкладке вы можете изменитьТип команды " в SQL и вставьте любой запрос в "Текст команды " коробка.

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

Выполнить запросЩелкните правой кнопкой мыши в верхнем левом углу таблицы результатов.Выбрать "Сохранить результаты как .. "Выберите CSV и альт!
 Geek22 мар. 2017 г., 14:04
Извините, это не работает, символы новой строки / возврата каретки по-прежнему обрабатываются, разбивая строку на несколько строк
 Jed Schaaf10 мая 2016 г., 00:20
Это не помещает даты / даты в полезный формат для электронной таблицы и не включает заголовки. Он хранит многострочные данные в одной строке, что отвечает на исходный вопрос, но, поскольку это потенциально создает другие проблемы, я могу:Я чувствую себя хорошо по поводу голосования.

Следующие "работы вокруг» сохраняет CRLF и поддерживает вставку данных с символами CRLF в Excel, не разбивая данные столбца на несколько строк. Это потребует заменыВыбрать *" с именованными столбцами и любые двойные кавычки в данных будут заменены значением разделителя.

declare @delimiter char(1)
set @delimiter = '|'

declare @double_quote char(1)
set @double_quote = '"'

declare @text varchar(255)
set @text = 'This
"is"
a
test'

-- This query demonstrates the problem.  Execute the query and then copy/paste into Excel.
SELECT @text

-- This query demonstrates the solution.
SELECT @double_quote + REPLACE(@text, @double_quote, @delimiter) + @double_quote
 Triynko30 сент. 2014 г., 19:35
Единственный реальный обходной путь - это использовать SSMS 2008 и использовать Open Office CALC для загрузки и сохранения CSV, поскольку он работает безупречно.
 Triynko30 сент. 2014 г., 19:34
Тот'это хорошо, за исключением того, что он потерпит неудачу, если ваши данные имеют '|' в этом уже, что делает мой. Это's образовательное онлайн-программное обеспечение, и поле Response в базе данных использует '|' символ для разделения отдельных текстовых полей или списков слов в заданиях, где ученики должны определить и нажать на переменное количество слов. Проблема заключается в том, что SSMS неправильно форматирует данные буфера обмена, используя формат CSV, с правильно заключенными в кавычки полями и экранированными кавычками. Кроме того, Excel не• правильно читать данные CSV, игнорирует escape-последовательности и использует какой-то упрощенный формат разделителя, который не соответствует спецификации CSV.

Один из далеко не идеальных решений - использовать графический интерфейс 2008 для базы данных 2012 года для копирования результатов запросов. Некоторые функции, такие кактаблица скриптов как CREATE " не работает, но вы можете запускать запросы и копировать, вставлять результаты в Excel и т. д. из базы данных 2012 года без проблем.

Microsoft должна это исправить!

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

CREATE FUNCTION XLS(@String NVARCHAR(MAX) )

RETURNS NVARCHAR(MAX)
AS
BEGIN
    SET @String = REPLACE (@String, CHAR(9), ' ')
    SET @String = REPLACE (@String, CHAR(10), ' ')
    SET @String = REPLACE (@String, CHAR(13), ' ')
    RETURN @String
END

CREATE FUNCTION XLS(@String NVARCHAR(MAX) )
RETURNS NVARCHAR(MAX)

AS
BEGIN
    SET @String = REPLACE (@String, CHAR(9), ' ')
    SET @String = REPLACE (@String, CHAR(10), ' ')
    SET @String = REPLACE (@String, CHAR(13), ' ')
    RETURN @String
END

Пример использования:

SELECT dbo.XLS(Description) FROM Server_Inventory

Вместо копирования & Вставив в Excel, вы можете экспортировать в Excel. Щелкните правой кнопкой мыши базу данных -> Задачи -> Экспорт данных...

Источник: Собственный клиент SQL ServerМесто назначения: превосходитьУкажите копию таблицы или запрос: выберите запрос и введите ваш запрос

CR / LF сохраняется в данных.

БОНУС (нули не копируются какНОЛЬ').

 mdc18 сент. 2018 г., 14:13
Этот работал для меня, НО мне пришлось выбирать версию Excel 97-2003. 2016 год привел к ошибкам. Didn»Попробуйте другие версии, кроме этих двух.

Это исправлено добавлением новой опцииСохранить CR \ LF при копировании или сохранении подИнструменты -> Опции... меню,Результаты запроса -> SQL Server -> Результаты в Grid.

Вам нужно открыть новый сеанс (окно), чтобы изменения произошли.

Значение по умолчанию не выбрано (false), что означает, что при копировании / сохранении из сетки текст копируется по мере его отображения (с заменой CR \ LF пробелами). Если установлено значение true, текст будет скопирован / сохранен из сетки, как он есть на самом деле - без замены символов.

В случае, если люди пропустили цепочку соединяемых предметов (что приводит кhttps://connect.microsoft.com/SQLServer/feedback/details/735714), эта проблема была исправлена в предварительной версии SSMS.

Вы можете скачать это бесплатно сhttps://msdn.microsoft.com/library/mt238290.aspxЭто отдельная загрузка, поэтому больше не требуется полный носитель SQL.

(Примечание - страница наhttps://msdn.microsoft.com/library/ms190078.aspx в настоящее время нетT обновляется с этой информацией. Я'После этого я должен отразить новый вариант в ближайшее время)

 theyetiman14 дек. 2018 г., 11:08
Это спаситель, и за ним стоит больше воздержаться. Однако в текущей версии SSMS (17.8.1), похоже, есть ошибка, из-за которой флажокСохранить CR \ LF при копировании или сохранении по умолчанию отключена, но настройка все еще применяется, поэтому она сохраняет символы CR / LF. Вам нужно поставить галочку, сохранить настройки, а затем снять галочку, чтобы игнорировать CR / LF при копировании / вставке.
 kesse31 мая 2017 г., 10:02
Именно то, что мне было нужно! Спасибо :)
 Sudhanshu Mishra16 мар. 2017 г., 01:21
Спасибо за сохранение моего здравомыслия :-)
 Ondrej17 мая 2017 г., 15:17
Также вам нужно открыть новый сеанс, чтобы изменения вступили в силу.
Если ваша таблица содержитnvarchar(max) поле переместите это поле в нижней части таблицы.В случае, если тип поля отличается от nvarchar (max), определите поле или поля, которые нарушают работу, и используйте эту же технику.Сохрани это.Снова выберите таблицу в SQL.Если вы не можете сохранить без изменения, вы можете временно включить соответствующие предупреждения вИНСТРУМЕНТЫ | ОПЦИИ, Этот метод не несет риска.Скопируйте и вставьте отображение SQL GRID с заголовками в Excel.Данные могут по-прежнему отображать возврат каретки, но по крайней мере ваши данные находятся в одной строке.Затем выберите все записи строк и выполните пользовательскую сортировку в столбце идентификатора.Все ваши записи теперь должны быть целыми и последовательными.

Чтобы иметь возможность копировать и вставлять результаты из SQL Server Management Studio 2012 в Excel или экспортировать в Csv с разделителями списков, сначала необходимо изменить параметр запроса.

Нажмите на запрос, а затем параметры.В разделе «Результаты» нажмите «Сетка».

Установите флажок рядом с:

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

Это должно решить проблему.

 Triynko30 сент. 2014 г., 19:45
Нету. Он фактически заменяет кавычки на двойные одинарные кавычки, что совершенно неприемлемо и не соответствует спецификации CSV. Я даже упомянул об этом в комментариях к исходному сообщению от 9 апреля 2013 года: «LOL, даже WORSE ... с этой опцией, вместо того, чтобы превращать двойные кавычки в пары двойных кавычек, как указано в спецификации CSV, он преобразует двойные кавычки в две одинарные кавычки. Это совершенно, совершенно неприемлемо ".
 JasonH01 мая 2015 г., 19:37
Это фактически решило проблему, с которой я столкнулся: несколько CRLF в очень большом поле для комментариев, где в 2012 году в Excel поле было перенесено на следующую запись, все испортилось. (Это работало для меня в SSMS 2005)

Лучший способ, которым яМы хотим включить возврат каретки / перенос строки в результат (Копировать / Копировать с заголовками / Сохранить результаты как) для копирования в Excel, чтобы добавить двойные кавычки вSELECTНапример:

 SELECT '"' + ColumnName + '"' AS ColumnName FROM TableName;

Если сами данные столбца могут содержать двойные кавычки, они могут быть экранированыдвойное двойное цитирование ':

 SELECT '"' + REPLACE(ColumnName, '"', '""') + '"' AS ColumnName FROM TableName;

Данные пустого столбца будут отображаться в виде двух двойных кавычек в SQL Management Studio, но копирование в Excel приведет к пустой ячейке.NULL значения будут сохранены, но это можно изменить с помощьюCONCAT('"', ColumnName, '"') или же .COALESCE(ColumnName, '')

Как прокомментировал @JohnLBevan, экранирование данных столбца также может быть выполнено с помощью встроенной функции:QUOTENAME

 SELECT QUOTENAME(ColumnName, '"') AS ColumnName FROM TableName;
 mortb12 янв. 2016 г., 09:39
Я тоже только что придумал такое же решение. Работает как шарм!
 JohnLBevan02 нояб. 2016 г., 14:45
NB. Чтобы убедиться, что любые кавычки в тексте правильно экранированы, вы можете использовать:SELECT quotename(ColumnName,'"') AS ColumnName FROM TableName;
 Segmentation Fault04 дек. 2018 г., 11:34
Спасибо. QUOTENAME кажется идеальным и самым элегантным решением.
 Fruitbat24 мар. 2017 г., 18:26
Следите за ограничениями QUOTENAME (128 символов).
 Ronald23 нояб. 2016 г., 11:16
@JohnLBevan That 'Это отличное дополнение и делает код еще более читабельным! Полная документацияQUOTENAME Функция может быть найдена на:msdn.microsoft.com/nl-nl/library/....

какие строки / данные имеют возврат каретки и исправить исходные данные ... вместо того, чтобы просто указывать на это.

ОБНОВЛЕНИЕ таблицы Set Field = Replace (Replace (Поле, CHAR (10), ' '), CHAR (13), ' ') ГДЕ Поле вроде "%" + CHAR (10) + '%' или поле типа "%" + CHAR (13) + '%'

@AHiggins'Предложение сработало для меня:

REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ')
 Vimal Saifudin26 авг. 2018 г., 08:22
это сработало для меня

Ваш ответ на вопрос