Программирование

Как вставить перенос строки в VARCHAR/NVARCHAR в SQL Server

Узнайте, как добавить символы возврата каретки и перевода строки (CHAR(13)+CHAR(10) или NCHAR) в VARCHAR и NVARCHAR в SQL Server для отображения многострочного текста.

Просто любопытно — как добавить перенос строки в строку VARCHAR или NVARCHAR в SQL Server?

Вы можете вставить перенос строки в VARCHAR или NVARCHAR, просто объединяя нужные управляющие символы — CHAR(13) для возврата каретки и CHAR(10) для перехода на новую строку.
В SQL Server пара из двух байт CHAR(13)+CHAR(10) (CRLF) является стандартным переносом строки Windows; для Unicode‑строк используйте NCHAR(13)+NCHAR(10).


Contents


Line break characters in SQL Server

SQL Server хранит текст как последовательность символов, по сути.
Управляющие символы, представляющие новую строку, следующие:

Символ Код Типичное использование
Возврат каретки CHAR(13) Перемещает курсор в начало текущей строки.
Переход на новую строку CHAR(10) Перемещает курсор вниз на одну строку.
Пара CRLF CHAR(13)+CHAR(10) Конвенция Windows для новой строки; большинство клиентов отображают её как перенос.

Функция CHAR возвращает символ по заданному ASCII‑коду, а NCHAR делает то же самое для Unicode.
Подробности см. официальную документацию Microsoft: CHAR (Transact‑SQL) и NCHAR (Transact‑SQL).


Inserting line breaks into VARCHAR

Если нужно собрать или изменить строку VARCHAR с переносами строк, обычно просто объединяете значения CHAR(13) и CHAR(10):

sql
-- Basic example
SELECT 'First line' + CHAR(13) + CHAR(10) + 'Second line' AS Result;

Если предпочитаете функцию CONCAT, которая автоматически обрабатывает NULL, используйте:

sql
SELECT CONCAT('First line', CHAR(13), CHAR(10), 'Second line') AS Result;

Notes

  • Печать – в SSMS команда PRINT обрезает вывод, поэтому используйте SELECT или вывод в текст, чтобы увидеть перенос строки.
  • Таблица против текста – кстати, когда результаты отображаются в таблице, переносы строк могут выглядеть как пробелы; переключитесь на «Результаты в текст», чтобы увидеть их корректно.

Inserting line breaks into NVARCHAR

Для строк Unicode обычно заменяете CHAR на NCHAR:

sql
-- NVARCHAR example
SELECT N'First line' + NCHAR(13) + NCHAR(10) + N'Second line' AS Result;

Поскольку NVARCHAR хранит UTF‑16, управляющие символы по сути представляют те же коды; NCHAR просто возвращает Unicode‑символ.

Если у вас уже есть строковая переменная и вы хотите вставить перенос строки посередине, используйте REPLACE:

sql
DECLARE @txt NVARCHAR(200) = N'LineA LineB';
SET @txt = REPLACE(@txt, N' ', N' ' + NCHAR(13) + NCHAR(10));
SELECT @txt AS Result;

Practical examples and tips

Ниже несколько практических сценариев:

Сценарий SQL
Сохранить многострочный текст в столбце INSERT INTO dbo.Note (Text) VALUES (N'Note line 1' + NCHAR(13) + NCHAR(10) + N'Note line 2');
Создать форматированное сообщение SELECT CONCAT('Hi ', @Name, CHAR(13), CHAR(10), 'Your score: ', @Score);
Заменить литерал \n в строке SELECT REPLACE(@Str, N'\n', NCHAR(13) + NCHAR(10));
Экспортировать в файл с правильными переводами строк Используйте BULK INSERT или OPENROWSET и убедитесь, что файл использует CRLF; саму строку можно хранить с CHAR(13)+CHAR(10) парами.

При отображении результата в таких инструментах, как SSMS, помните, что таблица может сворачивать переносы строк. Переключитесь на «Результаты в текст» или используйте PRINT (для коротких строк), чтобы убедиться в форматировании.


Common pitfalls and best practices

Ниже несколько распространённых ошибок и как их избежать:

Ошибка Решение
Использование только CHAR(10) на Windows‑клиентах → строки могут сливаться Обычно используйте пару CRLF.
Объединение NULL с + → вся выражение становится NULL Используйте CONCAT или ISNULL, чтобы избежать распространения NULL.
Предположение о разных концах строк на Linux/Unix Linux использует только CHAR(10); подгоните, если приложение работает в не‑Windows среде.
Печать очень длинных строк PRINT обрезает после 8 000 символов; используйте SELECT или вывод в текст.

Обычно применяйте пару CRLF для совместимости с Windows и обрабатывайте NULL через CONCAT.
Тестирование: просто посмотрите результаты в режиме «Результаты в текст», чтобы убедиться, что переносы строк отображаются корректно.


Conclusion

Переносы строк в SQL Server в основном представляются управляющими символами CHAR(13) (CR) и CHAR(10) (LF).

  • Для VARCHAR: обычно объединяете CHAR(13)+CHAR(10) или используете CONCAT.
  • Для NVARCHAR: обычно используете NCHAR(13)+NCHAR(10); логика та же.
  • Лучший подход: обычно применяете пару CRLF для совместимости с Windows и обрабатываете NULL через CONCAT.
  • Тестирование: просто посмотрите результаты в режиме «Результаты в текст», чтобы убедиться, что переносы строк отображаются корректно.

С этими методами вы можете вставлять переносы строк в любой строковый столбец или переменную и управлять тем, как текст отображается или экспортируется из SQL Server.

Авторы
Проверено модерацией
Модерация