将数据从SQL Server 2012复制到Excel时出现新行问题

MrP*_*ink 63 sql excel copy-paste sql-server-2008 sql-server-2012

我最近升级到SQL2012并使用Management Studio.我的数据库中的一个列CHAR(13) + CHAR(10)存储在其中.

当我使用SQL Server 2008时,这将完全复制并粘贴到Excel中.但是,现在,复制和粘贴相同的数据会在Excel中的数据中创建一个新的行/回车符.

我在SQL2012中错过了一个可以解决此问题的设置吗?我不想简单地REPLACE(CHAR(13) + CHAR(10))在每个数据库选择上,因为我必须从使用SELECT *到定义每个单独的列.

Rob*_*sen 52

我最好的猜测是,这不是一个错误,而是Sql 2012的一个功能.;-)在其他情况下,你很乐意保留你的cr-lf,就像复制大量文本一样.它只是在你的情况下不能很好地工作.

您可以随时在选择中删除它们.这将使您在两个版本中打算进行查询:

select REPLACE(col, CHAR(13) + CHAR(10), ', ') from table
Run Code Online (Sandbox Code Playgroud)

  • 我必须从表中运行`select REPLACE(REPLACE(col,CHAR(13),'')CHAR(10),'')以确保没有单个\n或\ r \n搞砸了我的Excel工作表 (7认同)
  • @Robert Fricke``select REPLACE(REPLACE(col,CHAR(13),''),CHAR(10),'')`` - 你在那里省略了一个逗号. (3认同)

THe*_*per 27

我找到了解决问题的方法; 而不是手动复制粘贴,使用Excel连接到您的数据库并导入整个表.然后删除您不感兴趣的数据.

以下是步骤(适用于Excel 2010)

  1. 转到菜单 Data > Get external data: From other sources > From SQL Server
  2. 键入sql server名称(如果您的服务器上没有Windows身份验证,则输入凭据)并连接.
  3. 选择包含带有换行符的数据的数据库和表,然后单击"完成".
  4. 选择目标工作表,然后单击"确定".

Excel现在将导入完整的表,其中新行完整无缺.

  • @Triynko是的,这就是为什么我把它称为"解决方法". (8认同)
  • @Triynko如果目标是从表中获取数据,那么这就是一种解决方法.哎呀,为它编写ac#应用程序将被称为解决方法. (6认同)
  • 但是,如果我要导出的"表"是查询而不是数据库表的结果呢? (4认同)

Cha*_*non 23

这是通过在复制上添加新选项Retain CR\LF或工具 - >选项...菜单,查询结果 - > SQL Server - >结果到网格下保存来解决的.

您需要打开新会话(窗口)才能进行更改.

默认值是未选中的(false),这意味着从网格中复制/保存将复制显示的文本(CR\LF替换为空格).如果设置为true,则文本将在实际存储时从网格中复制/保存 - 无需替换字符.

如果人们错过了连接项链(导致https://connect.microsoft.com/SQLServer/feedback/details/735714),则此问题已在SSMS的预览版中得到修复.

您可以从https://msdn.microsoft.com/library/mt238290.aspx免费下载,它是一个独立的下载,因此不再需要完整的SQL媒体.

(注意 - https://msdn.microsoft.com/library/ms190078.aspx上的页面目前没有使用此信息进行更新.我正在跟进这个,所以它应该很快反映出新的选项)

  • 您还需要打开新会话以使更改生效. (2认同)
  • 这是一个救星,应该得到更多的支持。然而,当前版本的 SSMS (17.8.1) 中似乎存在一个错误,即默认情况下未选中 **Retain CR\LF on copy or save** 复选框,但该设置仍然适用,因此它仍然保留CR/LF 字符。您需要勾选它,保存设置,然后取消勾选它以忽略复制/粘贴时的 CR/LF。 (2认同)

Ron*_*ald 13

我最好的方法是将结果中的回车符/换行符(使用标题复制/复制/保存结果为)复制到Excel中,在其中添加双引号SELECT,例如:

 SELECT '"' + ColumnName + '"' AS ColumnName FROM TableName;
Run Code Online (Sandbox Code Playgroud)

如果列数据本身可以包含双引号,则可以通过"双引号"转义它们:

 SELECT '"' + REPLACE(ColumnName, '"', '""') + '"' AS ColumnName FROM TableName;
Run Code Online (Sandbox Code Playgroud)

在SQL Management Studio中,空列数据将仅显示为2个双引号,但复制到Excel将导致空单元格.NULL将保留值,但可以使用CONCAT('"', ColumnName, '"')或更改COALESCE(ColumnName, '').

正如@JohnLBevan评论的那样,也可以使用内置函数来完成转义列数据QUOTENAME:

 SELECT QUOTENAME(ColumnName, '"') AS ColumnName FROM TableName;
Run Code Online (Sandbox Code Playgroud)

  • 注意:为了确保文本中的任何引号都正确转义,您可能需要使用:`SELECT quotename(ColumnName,'"') AS ColumnName FROM TableName;` (2认同)
  • 注意QUOTENAME的限制(128个字符). (2认同)

小智 5

@ AHiggins的建议对我很有用:

REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ')
Run Code Online (Sandbox Code Playgroud)


小智 5

将数据从 SQL Server 复制到 Excel 时出现行拆分问题。请参阅下面的示例并尝试使用替换一些字符。

SELECT replace(replace(CountyCode, char(10), ''), char(13), '') 
FROM [MSSQLTipsDemo].[dbo].[CountryInfo]
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以尝试将查询结果保存为excel,将文件扩展名更改为.txt。使用 Excel 打开(打开方式...),然后使用文本到列(格式为文本)。不确定这是否适用于这种情况,但对于其他擅长自动剥离的格式问题很有效。