如何将 SQL Server 2005 查询导出到 CSV

Posted

技术标签:

【中文标题】如何将 SQL Server 2005 查询导出到 CSV【英文标题】:How to export SQL Server 2005 query to CSV 【发布时间】:2010-10-22 10:01:19 【问题描述】:

我想将一些 SQL Server 2005 数据导出为 CSV 格式(用引号分隔的逗号)。我可以想到很多复杂的方法来做到这一点,但我想以正确的方式来做。我看过 bcp,但我不知道如何在字段周围加上引号(除了将它们连接到字段值,这很难看)。我想我可以用 sqlcmd 和 -o 来做到这一点,但出于同样的原因,这看起来很难看。

有 bcp 方法吗?

有没有合理的sqlcmd方式来做呢?

Management Studio 中是否有一些很棒的简单实用程序,我只是忽略了这一点?

【问题讨论】:

另见:***.com/questions/425379/… 【参考方案1】:

在 Management Studio 中,选择数据库,右键单击并选择 Tasks->Export Data。在那里,您将看到导出为不同类型格式的选项,包括 CSV、Excel 等。

您还可以从“查询”窗口运行查询并将结果保存到 CSV。

【讨论】:

我知道事情就是这么简单。谢谢。 当您将结果保存到 CSV 时,它似乎无法正确转义 varchar 字段中的逗号 导出为 CSV 时,它也不会在文本字段中转义 EOLN(有一种解决方法,可以在从数据库中选择时用双引号将导出的数据列括起来)。 您还需要更改 Management Studio 中的查询选项以修复字段转义并添加列标题。 -- 转到查询 -> 查询选项 -> 结果,然后选择包含列标题和引号字符串。【参考方案2】:

在management studio中,设置查询选项输出到文件,在options->查询结果中设置输出到文件,以逗号作为分隔符输出。

【讨论】:

不知道你能做到。谢谢。【参考方案3】:

如果您不能使用 Management Studio,我使用 sqlcmd。

sqlcmd -q "select col1,col2,col3 from table" -oc:\myfile.csv -h-1 -s","

这是从命令行执行此操作的快速方法。

【讨论】:

这种方法存在一些问题。它不包括引号,并在文件底部打印“受影响的行数”消息。你知道解决这两个问题的方法吗? 另一个注意事项:-q 使 sqlcmd 编辑器保持打开状态。 -Q 关闭它。 添加“SET NOCOUNT ON;”到查询,以抑制显示的行数。 看到这个:***.com/a/2426853/1246870: -W(删除尾随空格)对我来说是救命稻草【参考方案4】:

我必须比思进说的多做一件事才能让它在 SQL Server Management Studio 2005 中正确添加引号。转到

Tools->Options->Query Results->Sql Server->Results To Grid

勾选此选项:

Quote strings containing list separators when saving .csv results

注意:上述方法不适用于 SSMS 2005 Express!据我所知,使用 SSMS 2005 Express 将结果导出到 .csv 时无法引用字段。

【讨论】:

为什么哦,为什么这不是默认行为?这太愚蠢了,你必须设置它。不过,感谢您的提示。非常有用。 对于它的价值,“引用字符串”选项对我不起作用(未引用发出的字符串)。我最终不得不在我的 SELECT 语句中包含引号。留给微软做一个完全没用的数据导出工具吧。 我知道这是很久以前的事了,我使用的是 SQL Server 2008,但我想补充一点:确保在更改报价设置后,打开一个新查询运行查询并从中导出结果的窗口。除非你这样做,否则它是行不通的。只是为了阅读此答案的其他人的利益而添加此内容。【参考方案5】:

是的,Management Studio 中有一个非常简单的实用程序,如果您只是想将查询结果保存到 CSV。

右击结果集,选择“结果另存为”。默认文件类型为 CSV。

【讨论】:

【参考方案6】:

如果它符合您的要求,您可以在命令行中使用 bcp,如果您经常这样做或希望将其构建到生产过程中。

Here's a link 描述配置。

【讨论】:

这回答了我关于 bcp 的问题(它和我想的一样丑;没有人说 bcp 不丑)。谢谢。【参考方案7】:

对于即席查询:

以网格模式 (CTRL+D) 显示结果,运行查询,单击结果网格中的左上角框,粘贴到 Excel,另存为 CSV。您也许可以直接粘贴到文本文件中(现在不能尝试)

或者“结果到文件”也有 CSV 的选项

或用逗号分隔的“结果转文本”

Tool..Options 和 Query..options 下的所有设置(我认为,无法检查)也是

【讨论】:

这就是我要发布的内容 这不适用于大型结果集...内存异常。 :(【参考方案8】:

设置无计数

引号在那里,使用 -w2000 将每一行保持在一行。

【讨论】:

我认为这与 curtisboy 的建议相结合,对吧?好主意。【参考方案9】:

在 SQL 2005 中,这很简单: 1.打开SQL Server management studio,将需要的sql语句复制到TSQL中,比如exec sp_whatever 2.查询->结果到网格 3.高亮sql语句并运行 4. 突出显示数据结果(在结果网格的左上区域左键单击) 5. 现在右键单击并选择将结果另存为 6.在保存类型中选择CSV,输入文件名,选择位置,点击保存。

简单!

【讨论】:

【参考方案10】:

在 Sql Server 2012 - Management Studio 中:

解决方案 1:

执行查询

右击结果窗口

从菜单中选择将结果另存为

选择 CSV

解决方案 2:

右键数据库

选择任务,导出数据

选择源数据库

选择目标:平面文件目标

选择一个文件名

选择格式 - 分隔

选择表或编写查询

选择一个列分隔符

注意: 您可以选择一个文本限定符来分隔您的文本字段,例如引号。

如果您有一个带逗号的字段,请不要使用逗号作为分隔符,因为它不会转义逗号。您可以选择列分隔符,例如垂直条:|而不是逗号或制表符。否则,编写一个转义逗号或分隔 varchar 字段的查询。

您需要使用的转义字符或文本限定符取决于您的要求。

【讨论】:

【参考方案11】:

我认为最简单的方法是使用 Excel。

    打开一个新的 Excel 文件。 点击数据标签 选择其他数据源 选择 SQL Server 输入您的服务器名称、数据库、表名等。

如果您有更新版本的 Excel,您可以从 PowerPivot 导入数据,然后将这些数据插入到表格中。

【讨论】:

嘿。有开箱即用的想法。当时我在 SQL Server 中工作,并且无法从那里找到一个好的方法。我从没想过从另一边开始。好建议!【参考方案12】:

SSIS 是一种非常好的方法。然后可以使用 SQL Server 代理作业安排此操作。

【讨论】:

SSIS 实际上是做大多数事情的糟糕方式。如果您需要编写代码但不了解 SQL 或其他编程语言,它会很有用,否则它会很慢、臃肿、不能以理智的方式使用事务并且难以调试。当一个简单的 BCP 调用就可以完成时,整个 SSIS 包没有意义。【参考方案13】:

您可以使用以下 Node.js 模块轻而易举地做到这一点:

https://www.npmjs.com/package/mssql-to-csv

【讨论】:

以上是关于如何将 SQL Server 2005 查询导出到 CSV的主要内容,如果未能解决你的问题,请参考以下文章

如何将sql server2005数据库导出

关于SQL Server2005数据表字段关联问题

将 MS SQL Server 查询结果导出到 MS Access

SQL SERVER 2008 R2 数据库附加到 SQL server 2005,怎么整

如何删除大量数据 sql server2005 数据量在8千万左右??

使用SSIS从SQL Server 2005中的平面文件导入时如何保留NULL值