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

Sql server SSMS结果到网格-CRLF未保存在复制/粘贴中-有更好的技术吗?,sql-server,formatting,ssms,Sql Server,Formatting,Ssms,当我在网格中有一个结果集时,如: SELECT 'line 1 line 2 line 3' 或 对于嵌入的CRLF,网格中的显示似乎用空格代替了它们(我猜这样它们将显示所有数据) 问题是,如果我正在生成一个脚本,我不能简单地剪切和粘贴它。我必须转换代码以打开光标并打印相关列,以便从文本结果中复制和粘贴它们 是否有任何更简单的解决方法可以在结果网格的复制/粘贴操作中保留CRLF 网格之所以有用,是因为我目前正在为不同列中的同一对象生成许多脚本——一列中的bcp输出、另一列中的xml格式文件、另

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

SELECT 'line 1
line 2
line 3'

对于嵌入的CRLF,网格中的显示似乎用空格代替了它们(我猜这样它们将显示所有数据)

问题是,如果我正在生成一个脚本,我不能简单地剪切和粘贴它。我必须转换代码以打开光标并打印相关列,以便从文本结果中复制和粘贴它们

是否有任何更简单的解决方法可以在结果网格的复制/粘贴操作中保留CRLF


网格之所以有用,是因为我目前正在为不同列中的同一对象生成许多脚本——一列中的bcp输出、另一列中的xml格式文件、另一列中的表格创建脚本等等。

这是一种黑客行为,但请尝试以下方法:

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

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

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

此问题已通过添加一个选项来修复,该选项用于在复制/保存()时保留CR/LF

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

  • 这将导致在复制单元格时,
    CR
    LF
    CRLF
    被视为换行符。

    我感谢您的努力,但这并不比在文本输出模式下一次选择一列或用光标打印少多少工作。+1这在SQL Server Management Studio中确实是个麻烦。另一个旁注:在选择此选项后,我必须在它开始工作之前重新启动SSMS。如果我早点看到它,这将节省我几个小时。我以为SSIS包正在剥离我的换行符。在更改生效之前,我还必须重新启动SSMS。对我来说,更改的设置已经影响了新的查询窗口。无需重新启动SSMS。为什么默认情况下此选项未启用??不必重新启动SSMS,但必须关闭“查询编辑器”窗口并打开新的“查询编辑器”窗口。
    -------------------
    line 1
    line 2
    line 3
    
    (1 row(s) affected)