SSMS结果到网格 - 复制/粘贴中没有保留CRLF - 任何更好的技术?

时间:2010-04-20 23:53:29

标签: sql-server formatting ssms

当我在网格中有结果集时,如:

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格式文件,另一列中的表创建脚本等等...

4 个答案:

答案 0 :(得分:54)

此问题已在SSMS 16.5 build 13.0.16000.28中修复,并添加了在复制/保存(more details)(Connect bug)时保留CR / LF的选项。

  1. 工具>选项
  2. 展开查询结果> SQL Server>结果到网格
  3. 勾选保留复印件上的CR / LF或保存
  4. 重新启动SSMS
  5. 这会在复制单元格时将CRLFCRLF视为换行符。

答案 1 :(得分:2)

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

或在一个好的文本编辑器中。