在SQL Server Management Studio中使用标题保存结果

220

我正在使用SQL Server Management Studio。

我希望将查询结果保存到Excel文件中。

我选择“另存为”,然后保存为CSV文件,接着我可以在Excel中打开这个文件。只是有一个问题,我的导出文件缺少列标题,请问如何把它们也一起导出呢?

10个回答

329

工具 > 选项 > 查询结果 > SQL Server > 结果转为文本(或网格,如果需要) > 在结果集中包括列标题

更改此选项后,您可能需要关闭并重新打开SSMS。

注意:在SQL编辑器工具栏上,您可以单击将结果保存到文件(参见截图),而无需重新启动SSMS。

enter image description here

或者,如果您喜欢在开发过程中使用键盘快捷方式,您也可以按下 Ctrl + Shift + F


41
已测试并有效:工具 -> 选项 -> 查询结果 -> SQL Server -> 将结果输出为网格,然后勾选“复制或保存结果时包括列标题”。 - Jeff Ogata
62
这适用于SSMS 2012 - 你需要重新启动SSMS才能使设置生效。 - SliverNinja - MSFT
23
确认生效需要关闭并重新打开 SSMS 才能应用此选项。 - Christopher King
11
像Christopher所说,你确实需要重新启动SSMS才能使更改生效。 - Rob
11
对于 SSMS 2016,您仍需要重新启动它以使这些更改生效。 - Chris Haas
显示剩余5条评论

37
尝试使用导出向导。在这个例子中,我选择了一个完整的表,但是您也可以很容易地指定一个查询: 图片描述 图片描述 图片描述 图片描述 (您也可以在此处指定查询) 图片描述 图片描述 图片描述 图片描述 图片描述

6
谢谢您的回复。但是这是关于表格的问题,我的问题是关于查询的。 - dublintech
1
在第四步中,您还可以指定查询 - “指定表复制或查询”。 - John Dewey
我尝试了所有其他的方法,只有这个方法适用于我的混合数据类型。 - DOK
5
虽然这种方法可行,但非常痛苦且耗时。SQL Server 和 Excel 都是微软的产品,在 2013 年居然没有一个简单的导出按钮,这太惊人了! - Andre
这种方法就是所谓的“过河拆桥”。 - Christian

37
另一个可能性是使用剪贴板将结果直接复制粘贴到Excel中。但要小心通用类型的Excel列,因为它们有时会产生不可预测的结果,具体取决于您的数据。 在结果表格中任意位置按下CTL-A,然后右键单击: 输入图像描述 如果您在Excel中使用通用格式导致意外转换的问题,请在粘贴之前选择空白列并将其格式更改为“文本”。

1
这很棒,除了 Excel 格式。在 Excel 中,带前导零的数字(例如手机号码)会丢失零。还有其他格式问题潜伏着,使用需谨慎。感谢微软! - e_i_pi
我学到的一个关于Excel格式化的技巧是先粘贴,然后(在仍然高亮显示已粘贴区域的情况下)将所选区域的格式更改为文本。然后再次在其上面粘贴。现在前导零等应该被保留。 - Mark E.

14

至少在SQL Server 2012中,您可以在查询窗口中右键单击并选择“查询选项”。从那里,您可以选择包括网格和/或文本标题,并使“另存为”按您想要的方式工作,而无需重新启动SSMS。

您仍需要在菜单栏中的“工具 -> 选项”中更改设置,以便新查询窗口默认使用这些设置。


12

如果我们想在SQL Server Management Studio (SSMS)中永久启用此选项,Diego's accepted answer所建议的设置更改是完美的。这里的“永久”意味着新设置将自动应用于所有未来的查询会话中。通常情况下,这并非如此。很多时候,我们想临时启用此选项,然后恢复到原始状态。

更改此设置还需要重新启动SSMS才能生效。当我们正在编写查询或解决故障时,这是一种不太好的用户体验。因此,如果已经打开了许多未保存的查询会话窗口,则重新启动SSMS将是一项昂贵的任务。在这种情况下,我们要么必须放弃所有未保存的查询会话,要么将它们保存到磁盘上,以便在SSMS重新启动后可以恢复我们的旅程。

SSMS有一个更加流畅的选项,可以在每个查询会话基础上临时更改此设置。我列出了更改设置的步骤:

  1. 在查询编辑器窗口中右键单击。现在,在上下文菜单中单击查询选项...(参见屏幕截图)

    enter image description here

  2. 在左侧导航窗格的结果节点下选择网格。现在,勾选复制或保存结果时包含列标题复选框,然后单击确定(参见屏幕截图):

    enter image description here

就是这样。现在,当前的查询会话将立即开始遵守设置更改。我们不需要重新启动SSMS。此外,此设置更改也不会传播到任何未来的查询会话。因此,这是一个非常快速和方便的路径。


7
同样的问题也存在于Visual Studio中,这里是如何解决它的方法:
进入:
Tools > Options > SQL Server Tools > Transact-SQL Editor > Query Results > Results To Grid

现在请勾选复选框,将其设置为true:“在复制或保存结果时包括列标题”。

6

通过在结果窗格的左上角单击,右键单击,然后选择“带标题复制”(参见屏幕截图),选择您的结果。将其粘贴到Excel中。完成!

enter image description here

或者,如果您喜欢在开发过程中使用键盘快捷方式,也可以按下 Ctrl + Shift + C


1
当你需要复制大量数据时,这并不是很好。 - luisdev

2

当寻找一种方法使SSMS在导出结果时正确转义CSV分隔符时,您来到了这里。

猜猜怎么着?- 实际上这是一个选项,并且默认情况下未被选中。因此,默认情况下,您会得到损坏的CSV文件(如果您的导出数据很大并且您的数据通常没有逗号,您甚至可能没有意识到它) - 您必须进入并单击复选框以使您的CSV正确导出!

对我来说,这似乎是一个巨大的愚蠢设计选择,也是微软在软件方面的一种恰当比喻(“默认情况下损坏,需要毫无意义的仪式动作才能使微不足道的功能正常工作”)。

但是,如果有人能给我一个有效的现实生活场景,证明该选项存在的理由(即实际上有用的场景),我将很高兴向受访者选择的慈善机构捐赠100美元。


2
在SQL Server 2014管理工具中,设置在以下位置:
工具 > 选项 > 查询结果 > SQL Server > 文本结果 > 在结果集中包括列标题。

0

我也遇到了同样的问题。当我在查询窗口中使用右键并选择“查询选项”时,但标题行没有出现在输出CSV文件中。

然后我注销服务器,重新登录并运行脚本。 然后它就可以工作了。


你尝试改变“复制或保存结果时包括列标题”选项了吗?当你在“查询选项”窗口的左侧导航面板中选择“结果”>“网格”时,该选项可见。 - RBT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接