Cara menyisipkan line break di SQL Server VARCHAR/string NVARCHAR

Aku't melihat pertanyaan-pertanyaan serupa yang diajukan tentang topik ini, dan saya harus penelitian ini untuk sesuatu yang saya'm bekerja pada sekarang. Pikir saya akan memposting jawaban untuk itu dalam kasus orang lain yang memiliki pertanyaan yang sama.

Mengomentari pertanyaan (2)

char(13) adalah CR. Untuk DOS/Windows-style CRLF ganti baris, anda ingin char(13)+char(10), seperti:

'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.'
Komentar (7)
Larutan

Saya menemukan jawabannya di sini: http://blog.sqlauthority.com/2007/08/22/sql-server-t-sql-script-to-insert-carriage-return-and-new-line-feed-in-code/

Anda hanya menggabungkan string dan memasukkan CHAR(13) di mana anda ingin garis istirahat.

Contoh:

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

Ini cetakan yang berikut ini:

Ini adalah baris 1. Ini adalah baris 2.

Komentar (7)

Cara lain untuk melakukan ini adalah sebagai berikut:

INSERT CRLF SELECT 'fox 
jumped'

Artinya, hanya memasukkan satu baris dalam kueri anda saat menulis itu akan menambahkan seperti istirahat ke database. Ini bekerja di SQL server Management studio dan Query Analyzer. Saya percaya hal ini juga akan bekerja di C# jika anda menggunakan tanda @ pada string.

string str = @"INSERT CRLF SELECT 'fox 
    jumped'"
Komentar (2)

Jalankan ini di SSMS, itu menunjukkan bagaimana garis istirahat di SQL itu sendiri menjadi bagian dari nilai string yang rentang garis :

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))

Hasilnya : Baris 1 Baris 2 Baris 3

Berapa lama kosong line feed? Dua

Apa nilai ASCII? Tiga belas Sepuluh

Atau jika anda'd agak tentukan string dalam satu baris (hampir!) anda bisa mempekerjakan GANTI() seperti ini (opsional menggunakan CHAR(13)+CHAR(10) sebagai pengganti) :

PRINT REPLACE('Line 1`Line 2`Line 3','`','
')
Komentar (0)

Berikut Google...

Mengambil kode dari situs web:

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))

Sepertinya itu bisa dilakukan dengan mengganti placeholder dengan CHAR(13)

Pertanyaan yang bagus, tidak pernah melakukannya sendiri :)

Komentar (4)

Aku di sini karena aku khawatir bahwa cr-lfs bahwa saya yang ditentukan dalam C# string yang tidak ditampilkan di SQl Server Management Studio permintaan tanggapan.

Ternyata, mereka ada, tetapi tidak ditampilkan.

&Quot;seperti" cr-lfs, gunakan print pernyataan seperti:

declare @tmp varchar(500)    
select @tmp = msgbody from emailssentlog where id=6769;
print @tmp
Komentar (0)

Berikut ini's a C# fungsi yang menambahkan baris teks ke teks yang ada gumpalan, yang dibatasi oleh CRLFs, dan mengembalikan T-SQL ekspresi cocok untuk INSERT atau UPDATE operasi. It's ada beberapa dari kami yang eksklusif penanganan kesalahan di dalamnya, tetapi sekali anda rip itu, mungkin akan membantu-saya berharap begitu.

/// 
/// 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("");
    }
}
Komentar (0)

Ini selalu dingin, karena ketika anda mendapatkan daftar diekspor dari, katakanlah Oracle, maka anda mendapatkan catatan yang mencakup beberapa baris, yang pada gilirannya dapat menarik bagi, mengatakan, cvs file, jadi berhati-hatilah.

Bagaimanapun, Rob's jawaban yang lebih baik, tapi saya akan menyarankan menggunakan sesuatu yang lain dari @, cobalah beberapa lagi, seperti §§@@§§ atau sesuatu, sehingga akan memiliki kesempatan untuk beberapa keunikan. (Tapi masih, ingat panjang varchar/nvarchar di bidang yang anda masukkan ke dalam..)

Komentar (0)

I'd mengatakan

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

atau

concat(N'This is line 1.', 0xd000a, N'This is line 2.')
Komentar (0)