2015-05-04 51 views
0

我有以下脚本,从成功的数据库中读取记录:将SQL结果/记录直接写入另一个数据库?

sDSN = MyDSN 
sUsername = username 
sPassword = password 
sSQL ="Select TOP 1 * myTable" 
sDSN = "DSN=" & sDSN & ";UID=" & sUsername & ";PWD=" & sPassword & ";" 
Set sConnect = CreateObject("ADODB.Connection") 
WScript.Echo "Opening connection to source..." 
sConnect.Open sDSN 
Set resultSet = sConnect.Execute(sSQL) 

On Error Resume Next 
resultSet.MoveFirst 
Do While Not resultSet.eof 
    WScript.Echo resultSet("ID") & "," & resultSet("SomeColumn") & "," & resultSet("SomeOtherColumn") 
    resultSet.MoveNext 
Loop 
resultSet.Close 
sConnect.Close 
Set sConnect = Nothing 

这个伟大的工程,并输出类似以下内容:

1,值,值2

所以我想要做的就是把它写回另一个数据库。我意识到我可以手动编写一个指定每列的查询,但我想知道是否有一种方法可以将resultset()插入到一个简单的命令中。

有谁知道这是可能的吗?这是CACHÉ,因为有人总是问:) :)

回答

1

在VBScript中,没有没有简单的方法。我不确定CACHE是什么或不做什么,所以这并不影响我的答案。

您需要做的是在结果集的每个循环上为插入查询构建文本。

dim InsertSQL = "insert into MyNewTable values (" & resultSet("ID") & "," & resultSet("SomeColumn") & ")" 
+0

是啊,这是我在做什么。这很糟糕,因为我打算在多个表上执行此操作,这意味着我将不得不修改每个脚本的脚本。我想我可以得到resultSet的长度并做一个嵌套循环? –

+0

要改进的唯一方法是使用信息模式表并做一些真正的工作来设置一个通用的数据库到数据库程序。另一种选择是进入.NET。然后,您可以使用数据适配器和表格以较少的列名键入来完成此操作。这是一个让你开始的链接;它只会转储到CSV,但可能工作。 http://greaterthancomputing.blogspot.com/2014/02/export-entire-database-to-csv-text.html – KingOfAllTrades

1

如果没有人有一个更好的答案,这工作得相当好,是可重复使用的,无论表的

tSQL = "INSERT INTO targetTable VALUES (" 
    For i = 0 To resultSet.fields.Count 
    tSQL = tSQL & resultSet(i) 
    if i <> resultSet.fields.Count Then 
     tSQL = tSQL & "," 
    end if 
    Next 
    tSQL = tSQL & ")" 
+0

啊,非常好。这使你不必输入列名。 – KingOfAllTrades

+0

不幸的是,现在我意识到我不能使用参数,所以我在字段中使用单引号和逗号会导致一些重要的数据验证问题:( –

+0

是的,这些都是VBScript和数据库编程的问题。可能不可接受,但您可以写一个简单的功能去除所有违规的角色,这就是我以前为一些非敏感的应用(如电子邮件通知等)所做的。 – KingOfAllTrades

相关问题