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

时间:2012-05-10 16:14:17

标签: sql-server sql-server-2005 character-encoding ssms rpt

我想将我的大型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程序。

由于

8 个答案:

答案 0 :(得分:53)

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

答案 1 :(得分:18)

这是我的解决方案。

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

enter image description here

  • 现在,当您创建报告时,请使用“保存编码... ”菜单,然后选择“ Unicode ”(默认情况下,它是“UTF8” )

enter image description here

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

答案 2 :(得分:7)

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

- >在Ultra-Edit中,选项'文件,转换选项, unicode转换为ASCII '就可以了。文本文件从330meg减少到180mcg,Excel中的Microsoft Query现在可以看到列,而VBA可以读取文件&流程线*。

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

答案 3 :(得分: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 :(得分:4)

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


My Source(DavidAir回答)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

首先使用上述任何一种方法将数据保存到.rpt文件中。

带有固定空格列的默认.rpt。 (262MB)

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

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

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

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

答案 7 :(得分:0)

出于以下两个原因,我建议使用“ SQL Server导入和导出向导”:

  • 输出文件的底部不会像.rpt文件一样显示状态消息(例如,“(影响100行)”),这可能会干扰数据导入。
  • 能够指定长度大于1个字符的自定义行和列定界符
  • 能够指定自定义源到目标的映射(即,列FirstName可以映射到CSV中的first_name)
  • 能够直接传输到可从SSMS机器访问的任何其他数据库中
  • 能够显式选择文件编码和语言环境

可以通过在Management Studio中右键单击数据库(必须右键单击数据库而不是表)并选择“任务”>“导出数据”来访问它。

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