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

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

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

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

Ответ 1

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

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

select REPLACE(col, CHAR(13) + CHAR(10), ', ') from table

Ответ 2

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

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

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

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

Ответ 3

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

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

Значение по умолчанию не выбрано (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 в настоящее время не обновляется с этой информацией. Я слежу за этим, поэтому вскоре отразите новый вариант)

Ответ 4

Лучший способ включить возврат каретки/разрывы строк в результат (Копировать/Копировать с заголовками/Сохранить результаты как) для копирования в 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;

Ответ 5

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

REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ')

Ответ 6

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

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

Ответ 7

Увидев, что это уже не упоминается здесь, и как я столкнулся с проблемой...

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

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

Ответ 8

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

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

Ответ 9

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

  • Нажмите "Запросить", затем "Параметры".
  • В разделе "Результаты" нажмите "Сетка".
  • Установите флажок рядом с:

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

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Таблица UPDATE Set Field = Replace (Заменить (поле, CHAR (10), ''), CHAR (13), '') WHERE Поле типа '%' + CHAR (10) + '%' или поле типа '%' + CHAR (13) + '%'

Ответ 13

  • Если ваша таблица содержит поле nvarchar(max), переместите это поле в нижнюю часть таблицы.
  • В случае, если тип поля отличается от nvarchar (max), затем укажите поле или поля нарушения или используйте эту же технику.
  • Сохраните его.
  • Повторно выберите таблицу в SQL.
  • Если вы не можете сохранить без изменения, вы можете временно включить соответствующие предупреждения в TOOLS | OPTIONS. Этот метод не несет никакого риска.
  • Скопируйте и вставьте экран SQL GRID с заголовками в Excel.
  • Данные могут по-прежнему показывать возврат каретки, но по крайней мере ваши данные находятся в одной строке.
  • Затем выберите все записи строк и выполните произвольный сортировку в столбце ID.
  • Все ваши записи должны быть целыми и последовательными.

Ответ 14

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

  • Выполнять запрос
  • Щелкните правой кнопкой мыши в верхнем левом углу сетки результатов.
  • Выберите "Сохранить результаты как.."
  • Выберите csv и viola!

Ответ 15

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

Скопировать-вставить в Excel является основой SQL-сервера. Mircosoft либо нуждается в флажке, чтобы вернуться к поведению 2008 года, либо им необходимо увеличить перенос буфера обмена в Excel таким образом, чтобы ONE ROW EQUALS ONE ROW.

Ответ 16

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

  • Источник: Собственный клиент SQL Server
  • Назначение: Excel
  • Укажите копию таблицы или запрос: выберите запрос и введите свой запрос

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

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

Ответ 17

Сколько раз мне приходилось копировать данные из SQL в excel, я создал функцию для обработки новой строки, а также символов табуляции (которые меняют столбцы после вставки в 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

Ответ 18

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

SELECT replace(replace(CountyCode, char(10), ''), char(13), '') 
FROM [MSSQLTipsDemo].[dbo].[CountryInfo]

Ответ 19

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