SSMS :: 使用 Headers 复制并粘贴到 Excel 导致目标中有更多行

SSMS :: Copy with Headers and paste to Excel results in more rows in destination

特殊问题:我有一个 table 的 140.588 行和 246,313 MB,看起来像这样:

CREATE TABLE [dbo].[DMA_assessment](
    [InstanceName] [varchar](128) NULL,
    [DatabaseName] [varchar](128) NULL,
    [SizeMB] [varchar](30) NULL,
    [ImpactedObjectName] [varchar](128) NULL,
    [ImpactDetail] [varchar](max) NULL,
    [AssessmentName] [varchar](128) NULL,
    [AssessmentNumber] [int] NULL,
    [SourceCompatibilityLevel] [varchar](15) NULL,
    [TargetCompatibilityLevel] [varchar](15) NULL,
    [TargetSQLServerEdition] [varchar](15) NULL,
    [Category] [varchar](50) NULL,
    [Severity] [varchar](15) NULL,
    [ChangeCategory] [varchar](30) NULL,
    [Title] [varchar](500) NULL,
    [Impact] [varchar](max) NULL,
    [Recommendation] [varchar](max) NULL,
    [MoreInfo] [varchar](max) NULL,
    [ObjectType] [varchar](40) NULL,
    [DBOwnerKey] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

点击放大。

这个 table 是由 DMA Tool 创建的,我想使用输出在 Power BI 上可视化结果。查询一个table 这么大是没问题的。我需要将其导出为 .csv 或 .xlsx 文件

如果我进行臭名昭著的右键单击并“使用 Headers 复制”,然后将其粘贴到 Excel 文件中,结果有 141186 行(-1 因为第一个行是列名)

(再次点击查看详情)

所以我们在这里:

141186 - 140558 = 598

他们从那 598 行哪里来?

试了很多次,结果还是一样

我猜你的 varchar(max) 导致了问题。 Excel 中文本字段的大小是有限的。下面举个例子:

DECLARE @x VARCHAR(MAX) = '***************************************************************************';
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)
SELECT @x=CONCAT(@x,@x)

SELECT @x AS Test, 'Test' AS Test2

将结果复制到 excel 文件,您将得到两行,其中第二列 (Test2) 仅出现在第二行中。

您可以尝试在 excel.

中使用 .dqy 查询

我开发了 SSMSBoost 加载项,我们在文章中对此进行了介绍(您可以直接在 Excel 中创建 .dqy 查询,无需我们的加载项): https://www.ssmsboost.com/Features/ssms-add-in-run-query-in-excel

还有一个视频,其中解释了将数据导出到 Excel 的 3 种不同方式,而不会丢失数据(保留数据类型信息): (以原生 excel 格式复制粘贴,XML 导出,.dqy 查询) https://youtu.be/waDCukeXeLU