将数据从SQL Server Express导出为CSV(需要引用和转义)
我花了2天时间尝试从SQL Server安装中导出包含用户input数据的大型文本字段的75,000行表。 这些数据包含每一个简单的ascii字符,制表符和换行符。 我需要导出每个字段被引用的CSV,并且引用列中的引号已正确转义(“”)。
以下是我迄今为止所尝试的: – 从Management Studio中右键单击数据库并导出到Excel:由于字段太长而失败。 – 将数据从Management Studio导出到带有文本分隔符和逗号分隔的平面文件 – 完全无用,在字段中不会引用引号,从而使文件完全模糊不清 – 从命令行使用BCP – 也不支持引用字段。
我需要用FasterCSV ruby库导入。 它不允许引号分隔符是一个非标准的ASCII字符或多个字符。 它也不允许\ n或\ r在未加引号的列中。
任何帮助是极大的赞赏。
可以办到! 然而,你必须特别configurationSSMS使用引用的输出,因为一些愚蠢的原因,它不是默认的。
在查询窗口中,您要保存到查询 – >查询选项…
选中“保存.csv结果时包含列表分隔符的引号string”框。
然后
select 'apple,banana,cookie' as col1,1324 as col2,'one two three' as col3,'a,b,"c",d' as col4
会输出
col1,col2,col3,col4 "apple,banana,cookie",1324,one two three,"a,b,""c"",d"
这是我们都想要的。
我一直在试图弄清楚这一点。 不知道这是否适合你,因为你的桌子比我的桌子大得多,但这就是我只是一时兴起而已:
- 我通过执行
SELECT *
语句以Express方式提取表格 - 只需select结果行并按Ctrl + C
- 打开Excel
- 突出显示了我粘贴的表的数量
- 粘贴,它friggin'工作!
- 现在只需要将Excel导出为CSV并完成。
我知道这可能听起来很愚蠢,但它确实对我有用。
最简单的方法来做到这一点:
使用Excel数据导入工具
- 转到数据>从其他来源>从Sql服务器
- 填写服务器名称等
- select您要导入的表或视图。
然后将导入的数据保存到CSV文件。 如果要导出查询,请将查询保存为视图
这是我用来做这个事情的一个脚本的本质:
require 'rubygems' require 'active_record' require 'tiny_tds' require 'activerecord-sqlserver-adapter' require 'acts_as_reportable' require 'ruport' ActiveRecord::Base.logger = Logger.new("log/debug.log") ActiveRecord::Base.establish_connection( :adapter => 'sqlserver', :mode => 'dblib', :dataserver => 'servername', :username => 'username', :password => 'password', :timeout => '60000' ) class Table1 < ActiveRecord::Base set_table_name 'table_name' set_primary_key 'table_id' acts_as_reportable end Table1.report_table(:all).save_as("finished/table1.csv")
希望能帮助到你!
也许下面的链接可以帮助你:
使用SQL Server 2005 Express导入/导出数据
我很好奇为什么没有人build议在这个过程中使用SSIS(SQL Server Integration Services)? 从SSMS(SQL Server Management Studio)中导入/导出的所有向导和工具绝对不是全面的(而且它们当然不是,而且是的,微软应该有很多东西需要回答这个限制)。 但SSIS是一个非常全面的ETL工具,旨在解决这个问题。 学习曲线可能会有些陡峭,但是将表格导出到以逗号/引号分隔的csv文件并不是特别困难。
可能需要为Visual Studio添加这个附加组件才能有一个开发环境来创build一个包: http : //www.microsoft.com/en-us/download/details.aspx?id=42313 (链接是VS 2013,其他链接可用于其他版本的VS)。
罗伯特·卡尔霍恩的解决scheme并不适合我。 我们有很多带有逗号和回车/换行符的文本。我们使用了导出function,对Chris Christodoulou的解决scheme进行了一些更改。
在SQL Management Studio中,右键单击数据库并select任务 – >导出数据。
然后selectSQL Server作为源,并selectFlat File作为目标。 命名文件MyFile.csv。
将文本限定符设置为“
select“写入查询来指定数据传输”并粘贴到您的查询中。 您可以将下一个设置保留为默认值。
将数据导出后,用Excel打开并保存为Excel格式。
我能想出的最好的解决scheme是select所有的行并对XML进行复制。
将其粘贴到记事本文件中并将其保存为XML文件。 然后从Excel中打开该XML文件,瞧! 至less我如何得到我的文件。
我发现最简单的解决scheme是在你的查询中加双引号。
SELECT '"'+MYCHARACTERDATA+'"' FROM MYTABLE
如果您的电子表格允许您使用自定义文本限定符,那么您可以使用像|这样更具异国情调的字符 避免在文中加双引号。
Daft.SSMS应该以正确的CSV格式导出带引号的文本字段,并在这些字段中正确地转义引号。
我们做了一个小脚本来将SSMS“破”CSV转换成适当的CSV,在这个答案中find它: