如何将 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的主要内容,如果未能解决你的问题,请参考以下文章
将 MS SQL Server 查询结果导出到 MS Access
SQL SERVER 2008 R2 数据库附加到 SQL server 2005,怎么整