将SSMS .rpt输出文件转换为.txt / .csv

我想将我的大型SSMS(SQL Server Management Studio)查询结果(2.5m行,9个字段)导出为.csv或逗号分隔的.txt(带标题)。 (MS SQL Server 2005 Management Studio。)

这样我就可以逐行读入VBA程序(对数据进行一定的计算)或者在Excel中对其进行查询(例如使用Microsoft Query)。 计算很复杂,我宁愿在SSMS以外的地方进行。

如果我selectSSMS中的“查询结果到文本”和一个小的答案(几行,例如高达200k),我当然可以简单地复制并粘贴到文本编辑器。 对于我这里的大回答,我当然可以复制和粘贴200k左右的行,每次10次,进入一个文本编辑器,如超编辑。 (当我同时尝试所有2.5米的时候,我在SSMS里面发现了一个内存警告。)但是对于未来我想要一个更优雅的解决scheme。

对于“查询结果到文件”,SSMS总是写入一个.rpt文件。 (如果在结果窗口中右键单击并select“另存为”,则会出现如上所述的内存错误。)

– >所以看起来我唯一的select是让SSMS将结果输出到一个文件,即.rpt,然后将.rpt转换为.txt。

我假设这个.rpt是一个Crystal Reports文件? 或者不是。 我的电脑上没有Crystal Reports,所以我无法使用它来转换文件。

当在Ultra-Edit中打开.rpt时,它看起来很好。 但是,在Excel中的Microsoft Query中,标题不希望显示。

当我简单地使用VBA读写.rpt时,文件大小减半。 (330至180微克)。 在Microsoft Query中,标题确实显示(尽pipe第一个字段名有一个有趣的主angular,在其他完全不同的情况下,这在我之前发生过)。 我似乎能够在Excel中做有意义的数据透视表。

但是,当我在Ultra-Edit中打开这个新文件时,它显示中文字符! 难道还有一些有趣的angular色呢?

– >是否有免费(和简单/安全)转换器应用程序可用的地方。 或者我应该相信,这个.txt对于读入我的VBA程序是很好的。

谢谢

简单的方法:在SQL Server Management Studio中转到查询菜单>查询选项>结果>文本>更改“输出格式”为“逗号分隔”。 现在运行您的查询导出到一个文件,一旦完成重命名文件从.rpt到.csv,它将在Excel中打开:)。

这是我的解决scheme。

  • 使用Microsoft SQL Server Management Studio
  • 将其configuration为保存制表符分隔的.rpt文件:转到“ 查询 ”>“ 查询选项 ”>“ 结果 ”>“ 文本 ”>“ 输出格式 ”并select“ 制表符分隔 ”(按“确定”

在这里输入图像说明

  • 现在,当您创build报告时,使用“ 保存编码… ”菜单,并select“ Unicode ”(默认为“UTF8”)。

在这里输入图像说明

  • 您现在可以使用Excel打开文件,并且所有内容都将显示在列中,不会出现转义或外来字符问题(请注意,由于unicode编码,文件可能更大)。

您可以使用BCP( http://msdn.microsoft.com/en-us/library/ms162802.aspx

打开一个命令提示符然后input:

 SET Q="select * from user1.dbo.table1" BCP.EXE %Q% queryout query.out -S ServerName -T -c -t 
  • 您可以使用-U -P(而不是-T)进行SQL身份validation。
  • 你的应用程序与UNICODE有问题。 如果有疑问,可以使用-C {code page}强制代码页,请尝试850。

  • -t将强制选项卡作为字段分隔符,可以将其更改为逗号-t,

好的是你可以直接从你的VBA运行Shell命令中调用它。

那么在朋友的帮助下,我发现我的解决scheme:Rpt文件是在MS SQL Server Management Studio中生成的纯文本文件,但使用UCS-2 Little Endian编码而不是ANSI。

– >在超编辑选项'文件,转换选项, Unicode到ASCII '做了诀窍。 文本文件从330meg减less到180 meg,Excel中的Microsoft Query现在可以看到列,VBA可以读取文件和进程行*。

Ps另一种select是使用MS Access(可以处理大的结果)并将ODBC连接到数据库。 不过,我将不得不使用比MS SQL Server Management Studio的T-SQL命令less的Jet-SQL。 显然,可以在MS Access 2007中创build一个新的.adp文件,然后将T-SQL用于SQL Server后端。 但在MS Access 2010(在我的电脑上)这个选项似乎不存在了。

这是推荐的方式,我看你可以做到这一点。


我的来源 (DavidAir的回答)

select“结果到网格”然后右键单击网格并select“保存结果为…”这将保存CSV。

实际上,如果某些值包含逗号,则会出现问题 – 生成的CSV未正确转义。 RPT文件实际上相当不错,因为它包含固定宽度的列。 如果您有Excel,将结果转换为CSV的相对简单的方法是在Excel中打开RPT文件。 这将带来文本导入向导和Excel将做一个猜测列很好的工作。 浏览向导,然后将结果保存为CSV。