可以做到!不过你需要专门配置SSMS以使用引号输出,因为由于某种愚蠢的原因,这不是默认设置。
在你想要保存的查询窗口中,前往“查询(Query)” -> “查询选项(Query Options)…”
勾选“在保存 .csv 结果时,将包含列表分隔符的字符串加上引号”。
然后
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"
这正是我们想要的。
2022年8月8日更新
我刚刚安装了SSMS 18.12.1版本。 Microsoft不知何故从上述查询 -> 查询选项 -> 结果 -> 网格
方法和Tim Partridge建议的工具 -> 选项 -> 查询结果 -> SQL Server -> 网格结果
方法中都删除了“引用字符串”选项。我无法解决此SSMS版本的问题。
"
)。此回答中的情况还好,但我尝试了 SELECT '"'
和 SELECT 'a"'
,在这两种情况下,使用 SQL Server Management Studio 2014 输出的值都是逐字输出的。这绝对是一个有用的答案,但我已经给它投了反对票,因为它只在某些情况下有效,可能会给那些依赖它的人造成麻烦。 - Sam我也一直在试图解决这个问题。不确定这对你是否有效,因为你的表比我的大得多,但这是我凭直觉做的:
SELECT *
语句在 Express 中打开我的表我知道这听起来可能很愚蠢,但它实际上对我有用。
最简单的方法:
使用Excel数据导入工具
然后将导入的数据保存为CSV文件。 如果要导出查询,请将查询保存为视图。
SELECT '"'+MYCHARACTERDATA+'"' FROM MYTABLE
如果您的电子表格允许使用自定义文本限定符,则可以使用更奇特的字符(如|)来避免在文本中使用双引号。
愚蠢的是,SSMS应该将其导出为带引号的文本字段和这些字段中正确转义的引号的正确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")
希望能帮到您!
Robert Calhoun的解决方案对我不起作用。我们有很多带逗号和回车/换行符等文本。 我们使用导出功能,并对Chris Christodoulou上面的解决方案进行了一些更改。
在SQL Management Studio中,右键单击数据库,然后选择任务->导出数据。
然后选择SQL Server作为源,Flat File作为目标。将文件命名为MyFile.csv。
将文本限定符设置为"
选择“编写查询以指定数据传输”,并粘贴您的查询。 下一个设置可以保留默认设置。
导出数据后,打开Excel并以Excel格式保存。
我们编写了一个小脚本,将 SSMS 中“损坏”的 CSV 文件转换为正确的 CSV 格式,详见此答案: