当我在网格中有一个结果集时,例如:
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 格式文件、另一列中的表创建脚本等。 .
此问题已在 SSMS 16.5 版本 13.0.16000.28 中得到修复,并添加了在复制/保存时保留 CR/LF 的选项(更多详细信息)(连接错误)。
这将导致
CR
、LF
和 CRLF
在复制单元格时被视为换行符。
警告:此功能肯定还存在某种错误。
首先,我已经好几个月没有碰过这个选项了,最近又重新启动了。
我有一个包含多个列的查询,其中一列包含客户反馈(带有换行符)。当我将结果粘贴到 Google Docs/Excel 中时,反馈变成一行(如我所愿)。
然后我将查询复制到另一个文件并再次运行。这次结果包含换行符!
因此,要么存在非常奇怪的错误,要么存在某些秘密快捷方式更改当前窗口的设置。如果其他人看到这种行为,我很感兴趣。
这是一个黑客,但试试这个:
将结果集包装在 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)
或者在一个好的文本编辑器中。
您可以做的一件事是将结果发送到文件,然后使用能够监视文件更改的编辑器,该编辑器具有理解输出的卓越功能。