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
特殊问题:我有一个 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