Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

line breaks lost in sql server

Tags:

sql-server

I am entering error information into an ErrorLog table in my database. I have a utility class to do this:

ErrorHandler.Error("Something has broken!!\n\nDescription"); 

This works fine. However, when I try to access this table, the line breaks no longer seem to be present.

If I SELECT the table:

SELECT * from ErrorLog ORDER BY ErrorDate 

there are no line breaks present in the log. This is kind of expected, as line breaks in one-line rows would break the formatting. However, If I copy the data out, the line break characters have been lost, and the data is all on one line.

How do I get line breaks in data at the end of my query when I put line breaks in? I don't know if the string has been stripped of line breaks when it enters the table, or if the viewer in SQL Server Management Studio has stripped out the line breaks.

The data type of the column into which error messages are put is nvarchar(Max), if that makes a difference.

EDIT: Unexpectedly, Pendri's solution didn't work.

Here is an excerpt of the string just before it passes into the SQL server:

POST /ipn/paymentResponse.ashx?installation=272&msgType=result HTTP/1.0\n\rContent-Length: 833\n\rContent-Type:  

And here is the same string when I extract it from the grid viewer in SQL Server Management Studio:

POST /ipn/paymentResponse.ashx?installation=272&msgType=result HTTP/1.0  Content-Length: 833  Content-Type: 

The place where the line break should be has been double spaced.

Any ideas?

like image 760
Oliver Avatar asked Dec 05 '11 15:12

Oliver


People also ask

How do I store a newline character in SQL Server?

-- Using both \r\n SELECT 'First line. \r\nSecond Line. ' AS 'New Line'; -- Using both \n SELECT 'First line.

What is CHAR 13 SQL Server?

char(13) is carriage return and char(10) is line feed. Carriage Return character –0x0D, \r , Line Feed character – 0x0A, \n. Different operating systems have a different way of understanding new line.

How remove CR LF in SQL?

Finally we use the ASCII CHAR(13) to identify and remove Carriage Return( \r ), and use the ASCII CHAR(10) to identify and remove Line Feed ( \n ). These ASCII Characters we need to use in side the REPLACE() Function to remove the CRLF Character from a String.


2 Answers

No need to replace string input\output, you need just pick up correct option:

Tools -> Options...  > Query Results    > SQL Server      > Results to Grid   set "Retain CR\LF on copy or save" to true. 

And don't forget to restart your management studio!

according Charles Gagnon answer

like image 191
n1k1t0ss Avatar answered Sep 28 '22 08:09

n1k1t0ss


SSMS replaces linebreaks with spaces in the grid output. If you use Print to print the values (will go to your messages tab) then the carriage returns will be displayed there if they were stored with the data.

Example:

SELECT 'ABC' + CHAR(13) + CHAR(10) + 'DEF' PRINT 'ABC' + CHAR(13) + CHAR(10) + 'DEF' 

The first will display in a single cell in the grid without breaks, the second will print with a break to the messages pane.

A quick and easy way to print the values would be to select into a variable:

DECLARE @x varchar(100); SELECT @x = 'ABC' + CHAR(13) + CHAR(10) + 'DEF'; PRINT @x; 
like image 45
Tarwn Avatar answered Sep 28 '22 10:09

Tarwn