在SQL Server中丢失换行符

Oli*_*ver 18 sql-server

我将错误信息输入到我的数据库中的ErrorLog表中.我有一个实用程序类来执行此操作:

ErrorHandler.Error("Something has broken!!\n\nDescription");
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,当我尝试访问此表时,似乎不再出现换行符.

如果我SELECT在桌子上:

SELECT * from ErrorLog ORDER BY ErrorDate
Run Code Online (Sandbox Code Playgroud)

日志中没有换行符.这是预期的,因为单行中的换行符会破坏格式.但是,如果我复制数据,则换行符已丢失,数据全部在一行上.

当我放入换行符时,如何在查询结束时获得数据换行符?我不知道字符串在进入表时是否已被删除换行符,或者SQL Server Management Studio中的查看器是否已删除换行符.

放入错误消息的列的数据类型nvarchar(Max),如果这会产生影响.

编辑:出乎意料的是,Pendri的解决方案无效.

以下是字符串在传入SQL服务器之前的摘录:

POST /ipn/paymentResponse.ashx?installation=272&msgType=result HTTP/1.0\n\rContent-Length: 833\n\rContent-Type: 
Run Code Online (Sandbox Code Playgroud)

当我从SQL Server Management Studio中的网格查看器中提取它时,这是相同的字符串:

POST /ipn/paymentResponse.ashx?installation=272&msgType=result HTTP/1.0  Content-Length: 833  Content-Type:
Run Code Online (Sandbox Code Playgroud)

换行的位置应该是双倍间距.

有任何想法吗?

n1k*_*0ss 38

无需替换字符串输入\输出,您只需选择正确的选项:

Tools -> Options...

> Query Results 
  > SQL Server 
    > Results to Grid 

set "Retain CR\LF on copy or save" to true.
Run Code Online (Sandbox Code Playgroud)

别忘了重新启动管理工作室!

根据Charles Gagnon的回答

  • 该答案需要更多票。ps您只需要创建新的查询窗口即可;您无需在更改选项后重新启动。 (4认同)
  • 这只是设置新查询窗口的默认值。如果要更改现有查询窗口,请右键单击查询窗格,选择“查询选项”,然后转到“结果”>“网格”并选中“复制或保存时保留 CR/LF”。(您还可以从“查询”菜单进入“查询选项”。) (4认同)
  • 更改此设置后,我必须重新启动SSMS,然后它才能工作。我认为这比公认的答案更直接地解决了这个问题。 (3认同)

Tar*_*rwn 20

SSMS使用网格输出中的空格替换换行符.如果使用"打印"打印值(将转到"消息"选项卡),则如果它们与数据一起存储,则将在那里显示回车符.

例:

SELECT 'ABC' + CHAR(13) + CHAR(10) + 'DEF'
PRINT 'ABC' + CHAR(13) + CHAR(10) + 'DEF'
Run Code Online (Sandbox Code Playgroud)

第一个将显示在网格中的单个单元格中而没有中断,第二个将打印到消息窗格中.

打印值的快速简便方法是选择变量:

DECLARE @x varchar(100);
SELECT @x = 'ABC' + CHAR(13) + CHAR(10) + 'DEF';
PRINT @x;
Run Code Online (Sandbox Code Playgroud)


Dav*_*d C 7

几年后更新。

如上所述这里,一个解决方案以保持在SSMS查看换行是将输出转换为XML:

SELECT * FROM (
  SELECT * from ErrorLog ORDER BY ErrorDate
) AS [T(x)] FOR XML PATH
Run Code Online (Sandbox Code Playgroud)

幸运的是,如果您有 SSMS 2012,这不再是问题,因为会保留换行符。

  • 您应该使用“TYPE”关键字。看我的回答:http://stackoverflow.com/a/30927549/2266979 (2认同)