当我在网格中有结果集时,如:
SELECT 'line 1
line 2
line 3'
或
SELECT 'line 1' + CHAR(13) + CHAR(10) + 'line 2' + CHAR(13) + CHAR(10) + 'line 3'
使用嵌入式CRLF,网格中的显示似乎用空格替换它们(我猜它们将显示所有数据)。
问题在于,如果我是代码生成脚本,我不能简单地剪切和粘贴它。我必须转换代码以打开游标并打印相关列,以便我可以从文本结果中复制和粘贴它们。
是否有更简单的解决方法可以在结果网格的复制/粘贴操作中保留CRLF?
网格有用的原因是我正在为不同列中的同一对象生成许多脚本 - 一列中的bcp,另一列中的xml格式文件,另一列中的表创建脚本等等...
答案 0 :(得分:54)
此问题已在SSMS 16.5 build 13.0.16000.28中修复,并添加了在复制/保存(more details)(Connect bug)时保留CR / LF的选项。
这会在复制单元格时将CR
,LF
和CRLF
视为换行符。
答案 1 :(得分:2)
我相信这篇文章有几种有用的技巧:http://sqlblogcasts.com/blogs/martinbell/archive/2009/10/25/How-to-display-long-text-in-SSMS.aspx
答案 2 :(得分:0)
您可以做的一件事是将结果发送到文件,然后使用能够观察文件的编辑器进行更改,这些更改具有更好的理解输出的能力。
答案 3 :(得分:-1)
这是一个黑客,但试试这个:
将结果集包装在REPLACE(.....,CHAR(13)+ CHAR(10),CHAR(182))中以保留换行符,然后可以将它们替换回来
SELECT
REPLACE ('line 1' + CHAR(13) + CHAR(10)+ 'line 2' + CHAR(13) + CHAR(10) + 'line 3'
,CHAR(13)+CHAR(10),CHAR(182)
)
输出:
----------------------
line 1¶line 2¶line 3
(1 row(s) affected)
在SQL中替换它们:
select replace('line 1¶line 2¶line 3',CHAR(182),CHAR(13)+CHAR(10))
输出:
-------------------
line 1
line 2
line 3
(1 row(s) affected)
或在一个好的文本编辑器中。