然而,当我在Ultra-Edit中打开这个新文件时,它显示出了中文字符!可能还有一些奇怪的字符存在吗?
--> 也许有一个免费(且简单/安全)的转换应用程序可供使用。或者我应该相信这个 .txt 文件对于读入我的 VBA 程序来说是可以的。
谢谢。
然而,当我在Ultra-Edit中打开这个新文件时,它显示出了中文字符!可能还有一些奇怪的字符存在吗?
--> 也许有一个免费(且简单/安全)的转换应用程序可供使用。或者我应该相信这个 .txt 文件对于读入我的 VBA 程序来说是可以的。
谢谢。
简单方法:在 SQL Server 管理工具中,转到“查询”菜单并选择“查询选项…”>“结果”>“文本”>将“输出格式”更改为“逗号分隔符”。现在,运行您的查询以导出文件,并一旦完成,请将文件从.rpt
重命名为.csv
,它将在 Excel 中打开:)
:setvar mypth "F:\work\y temp\SSMS TEST\with sqlcmd\" :out $(mypth)"2 result.txt".
。当然,首先还需要选择菜单 > 查询 > SQLCMD模式。 - Relaxed1在朋友的帮助下,我找到了解决方案:Rpt文件是在MS SQL Server Management Studio中生成的纯文本文件,但使用的是UCS-2 Little Endian编码而不是ANSI。
我在文本编辑器中打开导出的文件并从Unicode转换为ASCII。文本文件从330兆减少到180兆,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后端。但是,在我的PC上的MS Access 2010中,似乎不存在这个选项。
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,
好处在于,您可以直接从运行shell命令的VBA中调用它。
BCP -i join.sql -o test.csv -c -t -S MYSERVER -T
时,会出现 "Copy direction must be either 'in', 'out' or 'format'" 的错误提示。参考:https://dev59.com/IWkv5IYBdhLWcg3wewxd - Yann39这是我认为你可以实现的推荐方式。
我的来源(DavidAir的答案)
选择“结果输出到网格”,然后右键点击网格并选择“另存为结果...”这将保存为CSV文件。
实际上,如果某些值包含逗号,则会出现问题 - 生成的CSV未被正确转义。RPT文件实际上相当好,因为它包含固定宽度的列。如果您有Excel,则将结果转换为CSV的相对简单方法是在Excel中打开RPT文件。这将带来文本导入向导,Excel会尝试猜测列。按照向导操作,然后将结果另存为CSV。
首先使用以上任何一种方法将数据导入.rpt文件。
默认情况下,.rpt文件具有固定的列间距。(262MB)
逗号分隔符带Unicode。(52MB) - 我使用了这个。
将文件扩展名更改为.csv。
在Excel中打开/导入它并验证数据。文件类型为“文本Unicode”。
将其另存为 CSV(逗号分隔),可以将文件大小减小到25 MB。