Вставка переноса строки в SQL Server: VARCHAR, NVARCHAR
Быстрый ответ
Если вы хотите вставить перенос строки в тип данных VARCHAR
или NVARCHAR
в SQL Server, это можно сделать при помощи комбинации CHAR(13) + CHAR(10)
:
DECLARE @Msg NVARCHAR(MAX) = 'Строка 1' + CHAR(13) + CHAR(10) + 'Строка 2';
SELECT @Msg;
Вы получите следующий результат:
Строка 1
Строка 2
Для того чтобы корректно отобразить переносы строк, проверяйте результаты запроса в режимах "Результаты в таблицу" или "Результаты в текст" в SSMS.
Знакомство с символами ASCII
Символы CHAR(13)
и CHAR(10)
в ASCII представляют собой Возврат каретки (CR) и Перевод строки (LF) соответственно. Они помогут сделать вывод данных типа SQL VARCHAR
более читабельным.
Поделим вместе некоторые строки
Чтобы создать многострочный текст, вставьте комбинацию символов возврат каретки и перевод строки в нужные вам места:
DECLARE @Letter NVARCHAR(MAX) = 'Уважаемый клиент,' + CHAR(13) + CHAR(10) + 'Ваш заказ подтвержден.' + CHAR(13) + CHAR(10) + 'Спасибо.';
SELECT @Letter; -- Письмо имеет официальный вид и правильно структурировано
Прощайте, однострочные и скудные на форматирование тексты. Ваш SQL-код теперь способен стать произведением искусства.
Раскрываем тайну
Переносы строки по умолчанию были незаметными в SSMS. Однако с помощью команды PRINT
вы сможете отрисовать их:
PRINT @Letter; -- Теперь ваше письмо будет напечатано и выглядит так, как нужно
Сохраняем переносы строк
Переносы строк также могут быть использованы в хранимых процедурах SQL Server для облегчения работы со сложными запросами:
CREATE PROCEDURE WriteLetter
AS
BEGIN
DECLARE @Letter NVARCHAR(MAX) = '...' -- как выше
PRINT @Letter; -- Хранимая процедура работает просто и надежно. Добавляйте переносы строк без труда!
END;
"Поезд ушёл!" или о проблемах с объёмом данных
Не забывайте, что использование переносов строк означает добавление двух дополнительных символов, что может повлиять на размер хранимых данных. Используйте LEN()
для проверки этого факта:
SELECT LEN(@Letter); -- Проверяйте длину строки: каждый символ важен!
Визуализация
Представьте строку VARCHAR
в виде скоростного поезда: "данные1данные2данные3"
, не делающего остановки по пути.
Когда мы добавляем станции (то есть переносы строк): "данные1🚉\nданные2🚉\nданные3"
, поездка становится более удобной и информативной благодаря необходимым остановкам.
Практические примеры использования
Создание отчетов
При создании отчетов в SQL Server умелое использование переносов строк позволяет улучшить их читаемость. От формата отчетности зависит в равной степени скорость понимания и обработки данных.
Динамичное конструирование строк
При динамической генерации строк функции STRING_AGG()
и CONCAT_WS()
оказываются весьма полезными для вставки переносов строк:
SELECT STRING_AGG(ColumnName, CHAR(13) + CHAR(10)) FROM MyTable; -- Переносы строк больше не являются задачей
Экспорт и импорт с применением переносов строк
Неважно, осуществляете ли вы импорт данных в SQL Server или экспортируете из него данные, сохранение переносов строк имеет важнейшее значение.
Будьте бдительны
Переносы строк, которые раньше использовались повсеместно, могут не поддерживаться фронтенд-приложениями, поэтому следует учитывать их совместимость, чтобы минимизировать возможные ошибки.
Полезные материалы
- New line in Sql Query – Stack Overflow — примеры и ответы сообщества на вопросы, связанные с добавлением переносов строк в SQL.
- STRING_AGG (Transact-SQL) – SQL Server | Microsoft Learn — официальная документация Microsoft по использованию функции
STRING_AGG
с различными разделителями, включая переносы строк. - SQL Server CONCAT_WS Function Example for Concatenation — руководство по использованию функции
CONCAT_WS
, которая позволяет использовать переносы строк как разделители. - SQL Authority Discussion About New Line in NVARCHAR — экспертное мнение о вставке переносов строк в поля типа
VARCHAR
иNVARCHAR
. - Inserting line breaks in SQL via Stored Procedure Example — учебник, в котором демонстрируется использование хранимых процедур для вставки переносов строк в SQL Server.