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

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

Комментарии к вопросу (2)

char(13) - это CR. Для переноса строк в стиле DOS-/Windows CRLF нужно char(13)+char(10), например:

'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.'
Комментарии (7)
Решение

Я нашел ответ здесь: http://blog.sqlauthority.com/2007/08/22/sql-server-t-sql-script-to-insert-carriage-return-and-new-line-feed-in-code/

Вы просто конкатенируете строку и вставляете CHAR(13) туда, где вы хотите сделать перенос строки.

Пример:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
SELECT @text

Это выводит следующее:

Это строка 1.
Это строка 2.

Комментарии (7)

Другой способ сделать это как таково:

INSERT CRLF SELECT 'fox 
jumped'

Таким образом, просто вставка линии прерывает Ваш вопрос, сочиняя, что это добавит подобный разрыв к базе данных. Это работает в студии управления SQL-сервером и Вопросе Анализатор. Я полагаю, что это будет также работать в C#, если Вы будете использовать знак на последовательностях.

string str = @"INSERT CRLF SELECT 'fox 
    jumped'"
Комментарии (2)

Управляйте этим в SSMS, он показывает, как линия прерывает сам SQL, становятся частью ценностей последовательности, которые охватывают линии:

PRINT 'Line 1
Line 2
Line 3'
PRINT ''

PRINT 'How long is a blank line feed?'
PRINT LEN('
')
PRINT ''

PRINT 'What are the ASCII values?'
PRINT ASCII(SUBSTRING('
',1,1))
PRINT ASCII(SUBSTRING('
',2,1))

Результат:
Линия 1
Линия 2
Линия 3

Какой длины подача пустой строки?
2

Каковы ценности ASCII?
13
10

Или если you' d скорее определяют Вашу последовательность на одной линии (почти!) Вы могли использовать, 'ЗАМЕНЯЮТ ()' как это (произвольно использование 'СЛУЧАЙНАЯ РАБОТА (13) +CHAR (10)' как замена):

PRINT REPLACE('Line 1`Line 2`Line 3','`','
')
Комментарии (0)

После Google...

Беру код с сайта:

CREATE TABLE CRLF
    (
        col1 VARCHAR(1000)
    )

INSERT CRLF SELECT 'The quick brown@'
INSERT CRLF SELECT 'fox @jumped'
INSERT CRLF SELECT '@over the '
INSERT CRLF SELECT 'log@'

SELECT col1 FROM CRLF

Returns:

col1
-----------------
The quick brown@
fox @jumped
@over the
log@

(4 row(s) affected)

UPDATE CRLF
SET col1 = REPLACE(col1, '@', CHAR(13))

Похоже, что это можно сделать, заменив заполнитель на CHAR(13).

Хороший вопрос, сам никогда этого не делал :)

Комментарии (4)

Я добрался здесь, потому что я был обеспокоен, что cr-lfs, которые я определил в последовательностях C#, не показывали в ответах вопроса Студии управления SQL-сервером.

Это складывается, они там, но не показываются.

К " see" cr-lfs, используйте заявление печати как:

declare @tmp varchar(500)    
select @tmp = msgbody from emailssentlog where id=6769;
print @tmp
Комментарии (0)

Here' s функция C#, которая предварительно на рассмотрении текстовую линию к существующей текстовой капле, разграниченной CRLFs, и возвращает выражение T-SQL, подходящее для операций 'по ОБНОВЛЕНИЮ' или 'ВСТАВКИ'. It' s получил часть нашей собственной обработки ошибок в нем, но как только Вы срываете это, это может быть полезно - Я надеюсь, что так.

<! - язык: c# - >

/// 
/// Generate a SQL string value expression suitable for INSERT/UPDATE operations that prepends
/// the specified line to an existing block of text, assumed to have \r\n delimiters, and
/// truncate at a maximum length.
/// 
/// <param name="sNewLine">Single text line to be prepended to existing textCurrent text value; assumed to be CRLF-delimitedInteger field length= iMaxLen) break;                // stop appending if we're already over
            if ((cum_length+orig_line.Length+2)>=iMaxLen)    // If this one will push us over, truncate and warn:
            {
                Util.HandleAppErr(this, fn, "Truncating comments: " + orig_line);
                curline = orig_line.Substring(0, iMaxLen - (cum_length + 3));
            }
            final_comments += " + '" + curline + "' + CHAR(13) + CHAR(10) \r\n";
            cum_length += orig_line.Length + 2;
        } // end foreach(second pass on original lines)

        return(final_comments);

    } // end main try()
    catch(Exception exc)
    {
        Util.HandleExc(this,fn,exc);
        return("");
    }
}
Комментарии (0)

Это всегда прохладно, потому что, когда Вы получаете экспортируемые списки от скажем Oracle, тогда Вы получаете отчеты, охватывающие несколько линий, которые в свою очередь могут быть интересными для, скажем, cvs файлы, поэтому остерегайтесь.

Во всяком случае, Rob' s ответ хорошо, но я советовал бы использовать что-то еще, чем, попробуйте еще много, как § § @@§ § или что-то, таким образом, у этого будет шанс для некоторой уникальности. (Но тем не менее, помните длину 'varchar'/'nvarchar' область, в которую Вы вставляете..)

Комментарии (0)

I' d говорят

concat('This is line 1.', 0xd0a, 'This is line 2.')

или

concat(N'This is line 1.', 0xd000a, N'This is line 2.')
Комментарии (0)