SSMS 结果到网格 - CRLF 未保留在复制/粘贴中 - 有更好的技术吗?

问题描述 投票:0回答:5

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

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

sql-server formatting ssms
5个回答
177
投票

此问题已在 SSMS 16.5 版本 13.0.16000.28 中得到修复,并添加了在复制/保存时保留 CR/LF 的选项(更多详细信息)(连接错误)。

  1. 工具 > 选项
  2. 展开查询结果 > SQL Server > 结果到网格
  3. 勾选 复制或保存时保留 CR/LF
  4. 重新启动SSMS

这将导致

CR
LF
CRLF
在复制单元格时被视为换行符。


15
投票

为自己回答这个问题,因为我永远不记得这是哪里:

enter image description here


2
投票

警告:此功能肯定还存在某种错误。

首先,我已经好几个月没有碰过这个选项了,最近又重新启动了。

我有一个包含多个列的查询,其中一列包含客户反馈(带有换行符)。当我将结果粘贴到 Google Docs/Excel 中时,反馈变成一行(如我所愿)。

然后我将查询复制到另一个文件并再次运行。这次结果包含换行符!

因此,要么存在非常奇怪的错误,要么存在某些秘密快捷方式更改当前窗口的设置。如果其他人看到这种行为,我很感兴趣。


-3
投票

这是一个黑客,但试试这个:

将结果集包装在 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)

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


-5
投票

您可以做的一件事是将结果发送到文件,然后使用能够监视文件更改的编辑器,该编辑器具有理解输出的卓越功能。

© www.soinside.com 2019 - 2024. All rights reserved.