Как вставить перенос строки в 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
- Inserting line breaks into VARCHAR
- Inserting line breaks into NVARCHAR
- Practical examples and tips
- Common pitfalls and best practices
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):
-- Basic example
SELECT 'First line' + CHAR(13) + CHAR(10) + 'Second line' AS Result;
Если предпочитаете функцию CONCAT, которая автоматически обрабатывает NULL, используйте:
SELECT CONCAT('First line', CHAR(13), CHAR(10), 'Second line') AS Result;
Notes
- Печать – в SSMS команда PRINT обрезает вывод, поэтому используйте SELECT или вывод в текст, чтобы увидеть перенос строки.
- Таблица против текста – кстати, когда результаты отображаются в таблице, переносы строк могут выглядеть как пробелы; переключитесь на «Результаты в текст», чтобы увидеть их корректно.
Inserting line breaks into NVARCHAR
Для строк Unicode обычно заменяете CHAR на NCHAR:
-- NVARCHAR example
SELECT N'First line' + NCHAR(13) + NCHAR(10) + N'Second line' AS Result;
Поскольку NVARCHAR хранит UTF‑16, управляющие символы по сути представляют те же коды; NCHAR просто возвращает Unicode‑символ.
Если у вас уже есть строковая переменная и вы хотите вставить перенос строки посередине, используйте REPLACE:
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.