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

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

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

SQL2012中有没有一个设置可以解决这个问题? 我不想简单地REPLACE(CHAR(13) + CHAR(10))在每一个数据库select,因为我不得不从SELECT *去定义每个单独的列。

我最好的猜测是,这不是一个错误,而是一个Sql 2012的function。;-)在其他上下文中,你会很乐意保留你的cr-lf,就像复制大块文本时一样。 只是它在你的情况下运作不好。

你总是可以将它们在你的select中删除。 这将使您的查询,因为你打算在这两个版本:

 select REPLACE(col, CHAR(13) + CHAR(10), ', ') from table 

我find了解决问题的办法。 而不是手工复制粘贴,使用Excel连接到您的数据库并导入完整的表。 然后删除您不感兴趣的数据。

这里是步骤(对于Excel 2010)

  1. 转到菜单Data > Get external data: From other sources > From SQL Server
  2. 键入sql服务器名称(如果您的服务器上没有Windows身份validation,则input凭据)并连接。
  3. 使用换行符select包含数据的数据库和表格,然后单击“完成”。
  4. select目标工作表,然后点击“确定”。

现在Excel将完整地导入完整的表格和换行符。

这可以通过在工具 – >选项…菜单, 查询结果 – > SQL服务器 – >结果到网格的 副本上添加一个新选项保留CR \ LF 来解决

您需要打开新的会话(窗口)以使更改占据一席之地。

默认值是取消选中(false),这意味着从网格复制/保存将复制显示的文本(用CR \ LFreplace为空格)。 如果设置为true,文本将被复制/保存在实际存储的网格中,而不需要replace字符。

如果人们错过了连接项链(导致https://connect.microsoft.com/SQLServer/feedback/details/735714 ),这个问题已经在SSMS的预览版本中解决了。

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

(注意 – 目前https://msdn.microsoft.com/library/ms190078.aspx的页面没有更新这个信息,我正在跟进这个,所以很快就会反映出新的选项);

将复制到Excel的结果(包含Headers / Copy Results As的结果复制/复制)中包含回车/换行符的最佳方法是在SELECT添加双引号,例如:

  SELECT '"' + ColumnName + '"' AS ColumnName FROM TableName; 

如果列数据本身可以包含双引号,则可以通过“双引号”进行转义:

  SELECT '"' + REPLACE(ColumnName, '"', '""') + '"' AS ColumnName FROM TableName; 

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

正如@JohnLBevan所评论的,转义列数据也可以使用内build函数QUOTENAME

  SELECT QUOTENAME(ColumnName, '"') AS ColumnName FROM TableName; 

@AHiggins的build议对我很好:

 REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ') 

当您最近使用“文本到列”时,这有时会发生在Excel中。

尝试退出excel,重新打开,然后再粘贴。 这通常适用于我,但我听说你有时必须重新启动计算机。

看到这里没有提到这是我怎么解决这个问题…

右键单击目标数据库,然后select“ Tasks > Export data然后按照。 “select目的地”屏幕上的目的地之一是Microsoft Excel,并且有一个步骤可以接受您的查询。

这是SQL Server导入和导出向导。 这比我通常使用的简单的Copy with headers选项要冗长得多,但是如果你有很多数据进入excel,这是一个值得的select。

以下“解决方法”保留CRLF并支持将CRLF字符的数据粘贴到Excel中,而无需将列数据拆分为多行。 这将需要用命名列replace“select *”,数据中的任何双引号将被replace为分隔符值。

 declare @delimiter char(1) set @delimiter = '|' declare @double_quote char(1) set @double_quote = '"' declare @text varchar(255) set @text = 'This "is" a test' -- This query demonstrates the problem. Execute the query and then copy/paste into Excel. SELECT @text -- This query demonstrates the solution. SELECT @double_quote + REPLACE(@text, @double_quote, @delimiter) + @double_quote 

为了能够将结果从SQL Server Management Studio 2012复制并粘贴到Excel或导出到带有列表分隔符的Csv,必须先更改查询选项。

  1. 点击查询然后选项。
  2. 在结果下点击网格。
  3. 选中旁边的框

    在保存.csv结果时引用包含列表分隔符的string。

这应该解决问题。

我遇到了同样的问题。 我能够使用以下解决scheme将我的结果转换为CSV格式:

  1. 执行查询
  2. 右键单击结果网格的左上angular
  3. select“保存结果为..”
  4. selectcsv和中提琴!

一种比理想的解决方法是将2008 GUI用于2012数据库来复制查询结果。 “脚本表作为CREATE”等function不起作用,但您可以运行查询并将结果复制粘贴到Excel等数据库从2012年没有问题。

微软需要解决这个问题!

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

你真的可以找出哪些行/数据有回车,并修复源数据..而不是只是把一个bandaid。

更新表设置字段=replace(replace(字段,CHAR(10),''),CHAR(13),'')字段像'%'+ CHAR(10)+'%'或字段像'%'+ CHAR(13)+'%'

  • 如果您的表包含一个nvarchar(max)字段将该字段移动到您的表的底部。
  • 在字段types与nvarchar(max)不同的情况下,然后确定违规字段或使用相同的技术。
  • 保存。
  • 重新selectSQL中的表。
  • 如果不能保存,可暂时closuresTOOLS |中的相关警告 选项 。 这种方法没有风险。
  • 将SQL GRID显示复制并粘贴到Excel。
  • 数据可能仍然显示回车,但至less您的数据都在同一行。
  • 然后select所有行logging并在ID列上进行自定义sorting。
  • 所有的logging现在应该是完整的和连续的。

更改我的所有查询,因为Studio更改版本不是一个选项。 试过以上提到的偏好没有影响。 它没有把报价放在什么时候有CR-LF。 也许只有当逗号发生时才会触发。

复制粘贴到Excel是SQL服务器的支柱。 Mircosoft或者需要一个checkbox来恢复到2008年的行为,或者他们需要增强剪贴板传输到Excel,使一行等于一行。

而不是复制和粘贴到Excel中,您可以导出到Excel。 右键单击数据库 – >任务 – >导出数据…

  • 来源: SQL Server Native Client
  • 目的地: Excel
  • 指定表复制或查询:select查询并input您的查询

CR / LF保留在数据中。

奖金(空值不复制为“NULL”)。

很多时候我不得不从SQL复制数据到Excel中,我已经创build了处理新行和制表符(在粘贴到Excel后进行列转换)的函数。

 CREATE FUNCTION XLS(@String NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS BEGIN SET @String = REPLACE (@String, CHAR(9), ' ') SET @String = REPLACE (@String, CHAR(10), ' ') SET @String = REPLACE (@String, CHAR(13), ' ') RETURN @String END CREATE FUNCTION XLS(@String NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS BEGIN SET @String = REPLACE (@String, CHAR(9), ' ') SET @String = REPLACE (@String, CHAR(10), ' ') SET @String = REPLACE (@String, CHAR(13), ' ') RETURN @String END 

用法示例:

 SELECT dbo.XLS(Description) FROM Server_Inventory 

将数据导出为Excel后,请突出显示date列和格式以符合您的需求或使用自定义字段。 为我工作就像一个魅力!