将记录集复制到Csv文件中

时间:2014-11-16 12:39:44

标签: sql-server csv vbscript

我有一个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

2 个答案:

答案 0 :(得分:0)

我怀疑是否有任何内置函数可以让你一次性导出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行写一次该文件(仅使用循环中的计数器)
  • 当你完成写入文件时,也不要忘记关闭你的文件句柄。

希望有所帮助。

答案 1 :(得分:0)

通过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