【问题标题】:Copy recordset into a Csv file [duplicate]将记录集复制到 Csv 文件中[重复]
【发布时间】:2015-01-13 10:30:57
【问题描述】:

我有一个 VBScript 文件,它从 SQL Server 数据库表中提取数据,然后将结果写入 CSV 文件。我的问题是每条记录一次写入文件一行。在 Excel VBA 中使用 CopyFromRecordset 时,我希望以类似的方式将记录集粘贴到 CSV 文件中。有没有办法做到这一点?这是我当前的代码,一次读取一行记录集,

Set con = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set outFile = CreateObject("Scripting.FileSystemObject").CreateTextFile("C:\Users\JASON SAMUELS\Desktop\VBS\test.csv")

con.Open "Provider=SQLOLEDB.1;Password=pwd123;Persist Security Info=True;User ID=TEST;Initial Catalog=DemoDB;Data Source=JASONPC\SQLEXPRESS"

rs.Open "SELECT * FROM MyTable", con, 1,3

rs.MoveFirst

Do
  'WScript.Echo rs("Name") & " " & rs("Surname")
  outFile.WriteLine rs("Name") & "," & rs("Surname")
  rs.MoveNext

Loop Until rs.EOF

rs.close
con.Close
Set con = Nothing

【问题讨论】:

    标签: sql-server csv vbscript


    【解决方案1】:

    我怀疑是否有任何内置函数可以让您一次性将所有记录集导出到 csv 文件中。 但恕我直言,您有一些选择: - 通过创建一个保存 csv 数据的缓冲区字符串来批量写入输出:

     'vbcrlf is a carriage return+line feed : Chr(10) & Chr(11)
    Do
    
     strOutputString = strOutputString & rs("Name") & "," & rs("Surname") & vbcrlf 
    rs.MoveNext
    
    Loop Until rs.EOF
     outFile.WriteLine strOutputString 
    
    • 例如,您还可以每 1000 行写入文件一次(只需在循环中使用计数器)
    • 也不要忘记在完成写入后关闭文件句柄。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      这可以通过 PowerShell 更轻松地完成。假设您在运行脚本的系统上安装了 SSMS:

      invoke-sqlcmd -serverinstance 'JASONPC\SQLEXPRESS' -username TEST -password pwd123 -query "select * from mytable" | export-csv -notypeinfo -path "C:\Users\JASON SAMUELS\Desktop\VBS\test.csv" -encoding ASCII -noclobber
      

      但仍有更快的选项,例如bcp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-19
        • 2014-05-31
        • 2022-02-16
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多