Проблема с новой строкой при копировании данных из 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 с разделителями списков, вы должны сначала изменить параметр запроса.
Это должно решить проблему.
Ответ 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, выделите столбец даты и формат в соответствии с вашими потребностями или используйте настраиваемое поле. Работал для меня как шарм!