Вставка переноса строки в SQL Server: VARCHAR, NVARCHAR

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите вставить перенос строки в тип данных VARCHAR или NVARCHAR в SQL Server, это можно сделать при помощи комбинации CHAR(13) + CHAR(10):

SQL
Скопировать код
DECLARE @Msg NVARCHAR(MAX) = 'Строка 1' + CHAR(13) + CHAR(10) + 'Строка 2';
SELECT @Msg;

Вы получите следующий результат:

Строка 1
Строка 2

Для того чтобы корректно отобразить переносы строк, проверяйте результаты запроса в режимах "Результаты в таблицу" или "Результаты в текст" в SSMS.

Кинга Идем в IT: пошаговый план для смены профессии

Знакомство с символами ASCII

Символы CHAR(13) и CHAR(10) в ASCII представляют собой Возврат каретки (CR) и Перевод строки (LF) соответственно. Они помогут сделать вывод данных типа SQL VARCHAR более читабельным.

Поделим вместе некоторые строки

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

SQL
Скопировать код
DECLARE @Letter NVARCHAR(MAX) = 'Уважаемый клиент,' + CHAR(13) + CHAR(10) + 'Ваш заказ подтвержден.' + CHAR(13) + CHAR(10) + 'Спасибо.';
SELECT @Letter; -- Письмо имеет официальный вид и правильно структурировано

Прощайте, однострочные и скудные на форматирование тексты. Ваш SQL-код теперь способен стать произведением искусства.

Раскрываем тайну

Переносы строки по умолчанию были незаметными в SSMS. Однако с помощью команды PRINT вы сможете отрисовать их:

SQL
Скопировать код
PRINT @Letter; -- Теперь ваше письмо будет напечатано и выглядит так, как нужно

Сохраняем переносы строк

Переносы строк также могут быть использованы в хранимых процедурах SQL Server для облегчения работы со сложными запросами:

SQL
Скопировать код
CREATE PROCEDURE WriteLetter
AS
BEGIN
    DECLARE @Letter NVARCHAR(MAX) = '...' -- как выше
    PRINT @Letter; -- Хранимая процедура работает просто и надежно. Добавляйте переносы строк без труда!
END;

"Поезд ушёл!" или о проблемах с объёмом данных

Не забывайте, что использование переносов строк означает добавление двух дополнительных символов, что может повлиять на размер хранимых данных. Используйте LEN() для проверки этого факта:

SQL
Скопировать код
SELECT LEN(@Letter); -- Проверяйте длину строки: каждый символ важен!

Визуализация

Представьте строку VARCHAR в виде скоростного поезда: "данные1данные2данные3", не делающего остановки по пути.

Когда мы добавляем станции (то есть переносы строк): "данные1🚉\nданные2🚉\nданные3", поездка становится более удобной и информативной благодаря необходимым остановкам.

Практические примеры использования

Создание отчетов

При создании отчетов в SQL Server умелое использование переносов строк позволяет улучшить их читаемость. От формата отчетности зависит в равной степени скорость понимания и обработки данных.

Динамичное конструирование строк

При динамической генерации строк функции STRING_AGG() и CONCAT_WS() оказываются весьма полезными для вставки переносов строк:

SQL
Скопировать код
SELECT STRING_AGG(ColumnName, CHAR(13) + CHAR(10)) FROM MyTable; -- Переносы строк больше не являются задачей

Экспорт и импорт с применением переносов строк

Неважно, осуществляете ли вы импорт данных в SQL Server или экспортируете из него данные, сохранение переносов строк имеет важнейшее значение.

Будьте бдительны

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

Полезные материалы

  1. New line in Sql Query – Stack Overflowпримеры и ответы сообщества на вопросы, связанные с добавлением переносов строк в SQL.
  2. STRING_AGG (Transact-SQL) – SQL Server | Microsoft Learnофициальная документация Microsoft по использованию функции STRING_AGG с различными разделителями, включая переносы строк.
  3. SQL Server CONCAT_WS Function Example for Concatenation — руководство по использованию функции CONCAT_WS, которая позволяет использовать переносы строк как разделители.
  4. SQL Authority Discussion About New Line in NVARCHAR — экспертное мнение о вставке переносов строк в поля типа VARCHAR и NVARCHAR.
  5. Inserting line breaks in SQL via Stored Procedure Example — учебник, в котором демонстрируется использование хранимых процедур для вставки переносов строк в SQL Server.