从SQL查询结果中复制大量数据

在我的SQL Server 2008中,运行查询后返回的数据非常庞大,可能有数百万条。我尝试复制,但出现了异常的SQL内存错误。请告诉我如何将整个数据复制并粘贴到Excel中。 我不想将其导出为文本文件,因为数据无法对齐。所以我想手动将其复制并粘贴到Excel中。请告诉我解决方案。

澄清一点:当SSMS尝试处理传入的数据时,可能会出现“内存不足”异常;如果超过了内存容量,就会出现该错误。如果这并没有导致内存不足错误,但在尝试复制和粘贴数据时发生了错误,那么问题就出在将数据复制到内存中第二次以进行复制和粘贴。任何绕过将数据返回给SMSS的答案(例如当前被接受的答案)都可以避免这个问题。 - RDFozz
3个回答

你不能按照你想要的那样复制和粘贴。不过你有几个选择。最简单的方法是右键点击输出结果,并将其保存为CSV文件。但这也假设你的文本数据中没有逗号。

Save Results As

你的下一个选择(也可能是最好的选择)是使用导出向导。右键点击你的数据库名称,然后选择任务,再选择导出向导。

Where is the wizard?

你的来源将是你右键点击的数据库。

Source

选择一个Excel目的地。

Destination

选择编写查询以指定要传输的数据。

Pick a query

粘贴您的查询

Paste in your query

您可以在此处更改电子表格中的工作表名称。

Select source tables

下面是一份映射列表供您查看。

List of mappings

从这里,你可以选择立即运行包或保存SSIS包以备将来使用/修复。如果你的导出第一次不成功,并且你对SSIS有一定了解,我建议你保存该包,这样你就可以在向导之外进行修正。

Save and run options

然后只需点击完成,再次点击完成。

如果您坚持使用Excel作为目标,则有两个简单的选项。 首先,本地的“sqlcmd.exe”或“bcp.exe”允许您运行查询并自动将其输出到文件。 假设您的数据没有制表符,制表符分隔的输出将自动输入到Excel列中。 如果您的数据包含制表符,则需要选择另一个分隔符,并在导入期间让Excel基于该分隔符选择列。 其次,将查询放入SSRS(SQL Server Reporting Services)报告中,运行它,单击软盘/保存图标右侧的箭头,然后导出到Excel。 数百万行需要SSRS 2012,保存为.xlsx-不幸的是,即使是SSRS 2008 R2也不允许超过64k行。 要自动化,请安排报告。 这些命令的参考资料: Technet sqlcmd entry Technet bcp entry

社交.msdn sqlcmd制表符论坛帖子


如果只是一次性的事情。

运行查询。 在结果窗口的右下角,点击左上角的空方块。 另存为结果... 默认是CSV格式,选择你想要转储文件的位置(网络共享或本地)。