Tôi không thấy bất kỳ câu hỏi tương tự nào được hỏi về chủ đề này và tôi đã phải nghiên cứu vấn đề này cho một cái gì đó tôi đang làm việc ngay bây giờ. Nghĩ rằng tôi sẽ đăng câu trả lời cho nó trong trường hợp bất cứ ai khác có cùng câu hỏi.
Tôi không thấy bất kỳ câu hỏi tương tự nào được hỏi về chủ đề này và tôi đã phải nghiên cứu vấn đề này cho một cái gì đó tôi đang làm việc ngay bây giờ. Nghĩ rằng tôi sẽ đăng câu trả lời cho nó trong trường hợp bất cứ ai khác có cùng câu hỏi.
Câu trả lời:
char(13)
là CR
. Đối với các CRLF
ngắt dòng kiểu DOS- / Windows , bạn muốn char(13)+char(10)
, như:
'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.'
+
, SQL Server sẽ bắt đầu phàn nàn rằng truy vấn của bạn quá sâu. Thay vào đó, giải pháp của tôi là sử dụng câu trả lời của Rob Cooper, nhưng với mã thông báo dài hơn và tối nghĩa hơn nhiều.
Tôi tìm thấy câu trả lời ở đây: http://blog.sqlauthority.com/2007/08/22/sql-server-t-sql-script-to-insert-carriage-return-and-new-line-feed-in- mã /
Bạn chỉ cần nối chuỗi và chèn một CHAR(13)
nơi bạn muốn ngắt dòng.
Thí dụ:
DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
SELECT @text
Điều này in ra như sau:
Đây là dòng 1.
Đây là dòng 2.
NCHAR(0x1234)
để có được một ký tự unicode. Không cần thiết để chèn ngắt dòng, nhưng có thể có ích nếu người ta phải chèn / tìm kiếm các ký tự unicode.
print
thay vì select
, chẳng hạn như:DECLARE @text NVARCHAR(100); SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'; print @text;
Một cách khác để làm điều này là như vậy:
INSERT CRLF SELECT 'fox
jumped'
Đó là, chỉ cần chèn một ngắt dòng trong truy vấn của bạn trong khi viết nó sẽ thêm ngắt giống như vào cơ sở dữ liệu. Điều này hoạt động trong phòng quản lý máy chủ SQL và Phân tích truy vấn. Tôi tin rằng điều này cũng sẽ hoạt động trong C # nếu bạn sử dụng dấu @ trên chuỗi.
string str = @"INSERT CRLF SELECT 'fox
jumped'"
Chạy cái này trong SSMS, nó cho thấy cách ngắt dòng trong chính SQL trở thành một phần của các giá trị chuỗi trải dài các dòng:
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))
Kết quả:
Dòng 1
Dòng 2
Dòng 3
Bao lâu là một nguồn cấp dữ liệu trống?
2
Các giá trị ASCII là gì?
13
10
Hoặc nếu bạn muốn chỉ định chuỗi của mình trên một dòng (gần như!) Bạn có thể sử dụng REPLACE()
như thế này (tùy chọn sử dụng CHAR(13)+CHAR(10)
làm thay thế):
PRINT REPLACE('Line 1`Line 2`Line 3','`','
')
Theo dõi Google ...
Lấy mã từ trang 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))
Có vẻ như điều đó có thể được thực hiện bằng cách thay thế trình giữ chỗ bằng CHAR (13)
Câu hỏi hay, không bao giờ tự làm :)
Tôi đã đến đây vì tôi lo ngại rằng cr-lfs mà tôi đã chỉ định trong chuỗi C # không được hiển thị trong các phản hồi truy vấn của SQl Server Management Studio.
Hóa ra, họ ở đó, nhưng không được hiển thị.
Để "xem" cr-lfs, hãy sử dụng câu lệnh in như:
declare @tmp varchar(500)
select @tmp = msgbody from emailssentlog where id=6769;
print @tmp
Đây là hàm C # bổ sung một dòng văn bản cho một blob văn bản hiện có, được phân định bằng CRLF và trả về một biểu thức T-SQL phù hợp cho INSERT
hoặc UPDATE
hoạt động. Nó có một số xử lý lỗi độc quyền của chúng tôi trong đó, nhưng một khi bạn tách nó ra, nó có thể hữu ích - tôi hy vọng vậy.
/// <summary>
/// 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.
/// </summary>
/// <param name="sNewLine">Single text line to be prepended to existing text</param>
/// <param name="sOrigLines">Current text value; assumed to be CRLF-delimited</param>
/// <param name="iMaxLen">Integer field length</param>
/// <returns>String: SQL string expression suitable for INSERT/UPDATE operations. Empty on error.</returns>
private string PrependCommentLine(string sNewLine, String sOrigLines, int iMaxLen)
{
String fn = MethodBase.GetCurrentMethod().Name;
try
{
String [] line_array = sOrigLines.Split("\r\n".ToCharArray());
List<string> orig_lines = new List<string>();
foreach(String orig_line in line_array)
{
if (!String.IsNullOrEmpty(orig_line))
{
orig_lines.Add(orig_line);
}
} // end foreach(original line)
String final_comments = "'" + sNewLine + "' + CHAR(13) + CHAR(10) ";
int cum_length = sNewLine.Length + 2;
foreach(String orig_line in orig_lines)
{
String curline = orig_line;
if (cum_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("");
}
}
Điều này luôn tuyệt vời, bởi vì khi bạn nhận được danh sách xuất từ Oracle, sau đó bạn nhận được các bản ghi trải dài trên một số dòng, điều này có thể thú vị đối với các tệp cvs, vì vậy hãy cẩn thận.
Dù sao đi nữa, câu trả lời của Rob là tốt, nhưng tôi sẽ khuyên bạn nên sử dụng một cái gì đó khác ngoài @, thử thêm một vài thứ, như § § @@ § § hoặc một cái gì đó, vì vậy nó sẽ có cơ hội cho một sự độc đáo. (Tuy nhiên, hãy nhớ độ dài của varchar
/ nvarchar
trường bạn đang chèn vào ..)
Tất cả các tùy chọn này hoạt động tùy thuộc vào tình huống của bạn, nhưng bạn có thể không thấy bất kỳ tùy chọn nào trong số chúng hoạt động nếu bạn đang sử dụng SSMS (như đã đề cập trong một số nhận xét SSMS ẩn CR / LFs)
Vì vậy, thay vì tự lái xe quanh khúc quanh, hãy kiểm tra cài đặt này trong
Tools
|
Options