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

问题描述 投票:46回答:8

我想将我的大型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 sql-server-2005 character-encoding ssms rpt
8个回答
53
投票

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


18
投票

这是我的解决方案。

  • 使用Microsoft SQL Server Management Studio
  • 将其配置为保存制表符分隔的.rpt文件:转到“查询”>“查询选项”>“结果”>“文本”>“输出格式”,然后选择“制表符分隔”(按OK)

enter image description here

  • 现在,当您创建报告时,使用“Save With Encoding ...”菜单,然后选择“Unicode”(默认情况下,它是'UTF8')

enter image description here

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

7
投票

在朋友的帮助下,我找到了我的解决方案: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(在我的电脑上)这个选项似乎不再存在。


7
投票

你可以使用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命令调用它。


4
投票

这是我认为你可以做到的推荐方式。


My Source(DavidAir的回答)

选择“结果到网格”,然后右键单击网格并选择“将结果另存为...”这将保存CSV。

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


0
投票

在我的情况下,我在SSMS上执行查询(在按下CTRL + SHIFT + F之前)结果打开一个窗口将其保存为rpt文件,我无法读取它(我的计算机中没有安装Crystal Report)所以。 ..下次我运行查询我把它保存为(所有文件)设置扩展名为* .txt,这就是我能够将其作为文本文件读取。


0
投票

首先使用上述任何方法在.rpt文件中获取数据。

默认.rpt,带有固定空间列。 (262MB)

用逗号分隔的逗号。 (52MB) - 我用过这个。

将文件扩展名更改为.csv。

在Excel中打开/导入并验证数据。文件类型为“文本Unicode”。

将其另存为CSV(逗号分隔),将大小减小到25 MB。


0
投票

我建议使用“SQL Server导入和导出向导”有几个原因:

  • 输出文件底部没有状态消息,就像.rpt文件那样(即“(100行受影响)”)可能会导致数据导入混乱
  • 能够指定长度大于1个字符的自定义行和列分隔符
  • 能够指定自定义源到目标映射(即,列FirstName可以映射到CSV中的first_name)
  • 能够执行直接传输到可从SSMS计算机访问的任何其他数据库
  • 能够明确选择文件编码和区域设置

可以通过右键单击管理工作室中的数据库来访问它(必须右键单击数据库而不是表),然后选择“任务”>“导出数据”。

Selecting the data export tool from the SSMS object explorer

当询问数据源时,您可以选择“SQL Server Native Client”,当要求您选择目标时,可以选择“平面文件目标”。

然后,系统会要求您指定要使用的表或查询。

您可以在此处找到有关该工具的更多信息:

https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/start-the-sql-server-import-and-export-wizard?view=sql-server-2017

© www.soinside.com 2019 - 2024. All rights reserved.