将SSMS .rpt输出文件转换为.txt / .csv
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将SSMS .rpt输出文件转换为.txt / .csv相关的知识,希望对你有一定的参考价值。
我想将我的大型SSMS(SQL Server Management Studio)查询结果(2.5米行,9个字段)导出为.csv或逗号分隔的.txt(带标题)。 (MS SQL Server 2005 Management Studio。)
这样我就可以逐行读入VBA程序(对数据进行某些计算)或在Excel中对它进行查询(例如使用Microsoft Query)。计算很复杂,我更喜欢在SSMS之外的其他地方进行。
如果我在SSMS中选择“查询结果到文本”和一个小答案(几行,例如高达200k),我当然可以简单地复制并粘贴到文本编辑器中。对于我在这里的大答案,我当然可以一次复制和粘贴200k左右的行10次,进入像Ultra-Edit这样的文本编辑器。 (当我一次尝试所有2.5米时,我在SSMS内部得到了一个内存警告。)但是对于未来我想要一个更优雅的解决方案。
对于“查询结果到文件”,SSMS始终写入.rpt文件。 (右键单击结果窗口并选择“另存为”时,它会像上面一样给出内存错误。)
- >所以看起来我唯一的选择就是让SSMS将其结果输出到一个文件,即.rpt,然后将.rpt转换为.txt。
我假设这个.rpt是一个Crystal Reports文件?或者不是。我的电脑上没有Crystal Reports,因此无法使用它来转换文件。
在Ultra-Edit中打开.rpt时看起来很好。但是在Excel中的Microsoft Query中,标题不想显示。
当我简单地使用VBA读取和写入.rpt时,文件大小减半。 (330meg至180meg)。在Microsoft Query中,标题现在显示(尽管第一个字段名称有一个有趣的主角,这在我之前在其他完全不同的情况下发生过)。我似乎能够在Excel中对它进行有意义的数据透视表。
但是当我在Ultra-Edit中打开这个新文件时,会显示中文字符!在某处还能有一些有趣的角色吗?
- >是否有可用的免费(和简单/安全)转换器应用程序。或者我应该相信这个.txt可以读入我的VBA程序。
谢谢
简单方法:在SQL Server Management Studio中,转到“查询”菜单并选择“查询选项...”>结果>文本>将“输出格式”更改为“逗号分隔”。现在,运行您的查询以导出到文件,一旦完成将文件从.rpt
重命名为.csv
,它将在Excel中打开:)。
这是我的解决方案。
- 使用Microsoft SQL Server Management Studio
- 将其配置为保存制表符分隔的.rpt文件:转到“查询”>“查询选项”>“结果”>“文本”>“输出格式”,然后选择“制表符分隔”(按OK)
- 现在,当您创建报告时,使用“Save With Encoding ...”菜单,然后选择“Unicode”(默认情况下,它是'UTF8')
- 您现在可以使用Excel打开文件,所有内容都在列中,没有转义或外来字符问题(请注意,由于unicode编码,文件可能会更大)。
在朋友的帮助下,我找到了我的解决方案:Rpt文件是在MS SQL Server Management Studio中生成的纯文本文件,但是使用UCS-2 Little Endian编码而不是ANSI。
- >在Ultra-Edit选项'文件,转换选项,unicode到ASCII'就行了。文本文件从330meg减少到180mcg,Excel中的Microsoft Query现在可以看到列,VBA可以读取文件和进程行*。
附:另一种选择是使用MS Access(可以处理大结果)并使用ODBC连接到数据库。但是,我必须使用Jet-SQL,它的命令比MS SQL Server Management Studio的T-SQL少。显然,可以在MS Access 2007中将.adp创建一个新文件,然后将T-SQL用于SQL Server后端。但在MS Access 2010(在我的电脑上)这个选项似乎不再存在。
你可以使用BCP
打开命令提示符,然后键入:
SET Q="select * from user1.dbo.table1"
BCP.EXE %Q% queryout query.out -S ServerName -T -c -t
- 您可以使用
-U -P
(而不是-T
)进行SQL身份验证。 - 您的应用与UNICODE有问题。您可以使用
-C {code page}
强制执行代码页。如有疑问,请尝试850。 -t
将强制选项卡作为字段分隔符,您可以将其更改为逗号-t,
好的是你可以直接从你的VBA运行shell命令调用它。
这是我认为你可以做到的推荐方式。
My Source(DavidAir的回答)
选择“结果到网格”,然后右键单击网格并选择“将结果另存为...”这将保存CSV。
实际上,如果某些值包含逗号,则会出现问题 - 生成的CSV未正确转义。 RPT文件实际上相当不错,因为它包含固定宽度的列。如果您有Excel,将结果转换为CSV的相对简单的方法是在Excel中打开RPT文件。这将调出文本导入向导,Excel可以很好地猜测列。完成向导,然后将结果保存为CSV。
在我的情况下,我在SSMS上执行查询(在按下CTRL + SHIFT + F之前)结果打开一个窗口将其保存为rpt文件,我无法读取它(我的计算机中没有安装Crystal Report)所以。 ..下次我运行查询我把它保存为(所有文件)设置扩展名为* .txt,这就是我能够将其作为文本文件读取。
首先使用上述任何方法在.rpt文件中获取数据。
默认.rpt,带有固定空间列。 (262MB)
用逗号分隔的逗号。 (52MB) - 我用过这个。
将文件扩展名更改为.csv。
在Excel中打开/导入并验证数据。文件类型为“文本Unicode”。
将其另存为CSV(逗号分隔),将大小减小到25 MB。
我建议使用“SQL Server导入和导出向导”有几个原因:
- 输出文件底部没有状态消息,就像.rpt文件那样(即“(100行受影响)”)可能会导致数据导入混乱
- 能够指定长度大于1个字符的自定义行和列分隔符
- 能够指定自定义源到目标映射(即,列FirstName可以映射到CSV中的first_name)
- 能够执行直接传输到可从SSMS计算机访问的任何其他数据库
- 能够明确选择文件编码和区域设置
可以通过右键单击管理工作室中的数据库来访问它(必须右键单击数据库而不是表),然后选择“任务”>“导出数据”。
当询问数据源时,您可以选择“SQL Server Native Client”,当要求您选择目标时,可以选择“平面文件目标”。
然后,系统会要求您指定要使用的表或查询。
您可以在此处找到有关该工具的更多信息:
以上是关于将SSMS .rpt输出文件转换为.txt / .csv的主要内容,如果未能解决你的问题,请参考以下文章
在哪里下载 sun.jdbc.odbc.JdbcOdbcDriver(尝试将输出 csv 从 Spoon 连接到 SSMS)