Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SSMS.rpt输出文件转换为.txt/.csv_Sql Server_Sql Server 2005_Character Encoding_Ssms_Rpt - Fatal编程技术网

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

Sql server 将SSMS.rpt输出文件转换为.txt/.csv,sql-server,sql-server-2005,character-encoding,ssms,rpt,Sql Server,Sql Server 2005,Character Encoding,Ssms,Rpt,我想将我的大型SSMS(SQL Server Management Studio)查询结果(2.5m行,9个字段)导出为.csv或逗号分隔的.txt(带标题)。(MS SQL Server 2005管理工作室) 因此,我可以将其逐行读取到VBA程序中(对数据进行某些计算),或在Excel中对其进行查询(例如,使用Microsoft Query)。计算是复杂的,我更喜欢在其他地方做,而不是SSM 如果我在SSMS中选择“查询结果到文本”和一个小的答案(几行,例如高达200k),我当然可以简单地复制

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

因此,我可以将其逐行读取到VBA程序中(对数据进行某些计算),或在Excel中对其进行查询(例如,使用Microsoft Query)。计算是复杂的,我更喜欢在其他地方做,而不是SSM

如果我在SSMS中选择“查询结果到文本”和一个小的答案(几行,例如高达200k),我当然可以简单地复制并粘贴到文本编辑器。对于我这里的大答案,我当然可以一次复制并粘贴大约200k行,10次,到一个文本编辑器中,比如Ultra Edit。(当我一次尝试所有2.5m时,SSM中会出现一个内存警告。)但对于未来,我希望有一个更优雅的解决方案

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

-->因此,看起来我唯一的选择是让SSMS将其结果输出到一个文件,即.rpt,然后将.rpt转换为.txt

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

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

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

然而,当我在Ultra Edit中打开这个新文件时,它显示了中文字符!里面还会有一些有趣的角色吗

-->是否有一个免费(简单/安全)的转换器应用程序可供选择。或者我应该相信这个.txt文件可以读入我的VBA程序


谢谢

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

-->在Ultra编辑选项“文件,转换选项,unicode到ASCII”中实现了这一技巧。文本文件从330兆减少到180兆,Excel中的Microsoft Query现在可以看到列,VBA可以读取文件和流程行*


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

我认为这是推荐的方法


(大卫代尔的回答)

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

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

您可以使用

打开命令提示符,然后键入以下内容:

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命令调用它

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

这是我的解决方案

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

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

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

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

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

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

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

将文件扩展名更改为.csv

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

将其另存为CSV(逗号分隔),它