很奇怪的问题。
我在 T-SQL 中设计查询,并经常将“结果”选项卡中显示的输出复制到 Excel 中,以便仔细检查/分析结果/检查错误等。
最近,我注意到,在很多情况下,当我在 T-SQL“结果”选项卡中选择输出数据,右键单击、复制,然后右键单击并将其粘贴到 Excel 中时,输出无法正确粘贴。例如,今天,我将 SQL 输出粘贴到 Excel 电子表格中,Excel 中“A”列中的两个单元格不包含任何值。但是当我在 Excel 中查看复制的数据时,A 列中肯定有一个值。还有许多其他类似的复制错误。
有其他人遇到过这种情况吗?我以前从未听说过这种情况。但几个月来这种情况已经发生过好几次了。
这不是一个小问题,因为其后果显然可能非常严重。
答案1
有几种情况可能会导致这种情况。1
) 数据中存在不可打印字符。要验证这一点,请将输出路由到文本文件,然后在显示十六进制代码的文本编辑器中打开该文件。许多 StackExchange 问题都涉及如何删除 SQL 中的不可打印字符。 示例问题和解决方案。
2) Excel 会记住过去的行为或格式并将其应用于当前数据。要解决此问题,请关闭所有 Excel 实例并重新开始。
根据评论进行编辑:
要删除多余的 CRLF,请尝试以下命令:
Declare @CR as Varchar
Declare @LF as Varchar
Declare @CRLF as Varchar(2)
Set @CR = CONVERT(VARCHAR, CONVERT(VARBINARY, '0x0D', 1))
Set @LF = CONVERT(VARCHAR, CONVERT(VARBINARY, '0x0A', 1))
Set @CRLF = @CR + @LF
Select Replace(Columnname, @CRLF, '')
这仅限于 CRLF。如果您的数据包含更多十六进制字符,则需要更强大的功能。