68

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

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

是否有我在 SQL2012 中遗漏的设置可以解决此问题?我不想简单地REPLACE(CHAR(13) + CHAR(10))选择每个数据库,因为我必须从使用SELECT *到定义每个单独的列。

4

19 回答 19

55

我最好的猜测是,这不是错误,而是 Sql 2012 的一个功能。;-) 在其他情况下,您会很乐意保留您的 cr-lf,例如在复制大量文本时。只是它在您的情况下效果不佳。

你总是可以在你的选择中去掉它们。这将使您在两个版本中都按照您的意图进行查询:

select REPLACE(col, CHAR(13) + CHAR(10), ', ') from table
于 2012-11-21T20:09:22.463 回答
42

这可以通过在Tools -> Options...菜单,Query Results -> SQL Server -> Results to Grid下添加一个新选项Retain CR\LF on copy or save来解决。

您需要打开新会话(窗口)以进行更改。

默认值为未选中 (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上的页面当前未使用此信息更新。我正在跟进此问题,因此它应该很快反映新选项)

于 2015-10-29T17:13:36.867 回答
29

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

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

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

Excel 现在将导入带有完整换行符的完整表格。

于 2014-06-06T08:50:03.743 回答
14

我想出在结果中包含回车/换行符以复制到 Excel 的最佳方法是在 中添加双引号SELECT,例如:

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

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

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

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

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

 SELECT QUOTENAME(ColumnName, '"') AS ColumnName FROM TableName;
于 2015-03-10T14:24:02.687 回答
6

@AHiggins 的建议对我很有效:

REPLACE(REPLACE(REPLACE(B.Address, CHAR(10), ' '), CHAR(13), ' '), CHAR(9), ' ')
于 2015-09-22T17:46:44.133 回答
4

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

SELECT replace(replace(CountyCode, char(10), ''), char(13), '') 
FROM [MSSQLTipsDemo].[dbo].[CountryInfo]
于 2019-10-12T13:37:06.783 回答
3

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

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

于 2013-06-14T18:02:28.460 回答
3

看到这里还没有提到这一点,这就是我解决这个问题的方法......

右键单击目标数据库并选择Tasks > Export data并遵循它。“选择目的地”屏幕上的目的地之一是 Microsoft Excel,有一个步骤可以接受您的查询。

它是 SQL Server 导入和导出向导。它比我通常使用的带有标题的简单复制选项要冗长得多,但是,当您有大量数据要进入 excel 时,它是一个值得选择的选项。

于 2015-07-28T11:09:07.857 回答
1

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

  1. 单击查询,然后单击选项。

  2. 在结果下单击网格。

  3. 选中旁边的框:

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

这应该可以解决问题。

于 2014-09-10T17:04:34.263 回答
1

以下“解决方法”保留了 CRLF,并支持将带有 CRLF 字符的数据粘贴到 Excel 中,而不会将列数据分成多行。它将需要用命名列替换“select *”,并且数据中的任何双引号都将替换为分隔符值。

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
于 2013-09-12T19:39:48.790 回答
1

一种不太理想的解决方法是针对 2012 数据库使用 2008 GUI 来复制查询结果。某些功能(例如“将脚本表创建为 CREATE”)不起作用,但您可以运行查询并将结果从 2012 数据库复制粘贴到 Excel 等中,没有任何问题。

微软需要解决这个问题!

于 2014-12-23T14:10:24.793 回答
1

很多次我必须将数据从 SQL 复制到 excel,我创建了处理换行符和制表符的函数(在粘贴到 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
于 2017-09-29T12:22:59.023 回答
1

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

  • 来源: SQL Server Native Client
  • 目的地: Excel
  • 指定表副本或查询:选择查询并输入您的查询

CR/LF 保留在数据中。

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

于 2016-04-25T21:13:44.690 回答
0

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

  1. 执行查询
  2. 右键单击结果网格的左上角
  3. 选择“将结果另存为..”
  4. 选择 csv 和 viola!
于 2014-10-17T19:35:37.100 回答
0
  • 如果您的表格包含一个nvarchar(max)字段,请将该字段移至表格底部。
  • 如果字段类型与 nvarchar(max) 不同,则识别有问题的一个或多个字段并使用相同的技术。
  • 保存。
  • 重新选择 SQL 中的表。
  • 如果您无法在没有更改的情况下保存,您可以在TOOLS |中暂时关闭相关警告。选项。这种方法没有风险。
  • 将带有标题的 SQL GRID 显示复制并粘贴到 Excel。
  • 数据可能仍然显示回车,但至少您的数据都在同一行上。
  • 然后选择所有行记录并对 ID 列进行自定义排序。
  • 您的所有记录现在应该是完整且连续的。
于 2014-03-30T00:26:48.057 回答
0

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

于 2012-11-20T17:44:03.123 回答
0

你真的可以找出哪些行/数据有回车并修复源数据.. 而不是只是在上面贴上创可贴。

UPDATE 表 Set Field = Replace(Replace(Field, CHAR(10), ' '), CHAR(13), ' ') WHERE Field like '%' + CHAR(10) + '%' or Field like '%' +字符 (13) + '%'

于 2012-11-21T20:12:04.723 回答
0

更改我的所有查询,因为 Studio 更改了版本不是一个选项。尝试了上面提到的偏好没有效果。当有 CR-LF 时,它没有加上引号。也许它只在逗号发生时触发。

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

于 2015-02-10T20:03:58.817 回答
-2

将数据导出到 Excel 后,突出显示日期列和格式以满足您的需求或使用自定义字段。像魅力一样为我工作!

于 2016-06-30T16:51:41.033 回答