【问题标题】:VB6 insert into table from RecordsetVB6 从 Recordset 插入表
【发布时间】:2018-08-22 14:58:10
【问题描述】:

一视图一表

两者确实具有相同的列

但它们位于不同的服务器中

我想做的如下所示

cn1.ConnectionString = "Server1"
cn2.ConnectionString = "Server2"
sql = "SELECT * FROM VIEW"
Set rs.1ActiveConnection = cn1
rs1.Open sql, cn1
sql = "INSERT INTO table SELECT * FROM view"
cn2.Execute (sql)

我可以通过cn1访问view,但是通过cn2访问table

所以这不能做

我想知道怎么做

table 和 view 完全一样

我搜索了很多,但没有适合我的好例子

我认为有两种方法可以做到这一点

将记录集插入表格或将每个字段插入另一个字段

简单的例子会很有帮助,谢谢

【问题讨论】:

  • 这不是“从记录集中插入表”。它只是运行一个插入查询。
  • 看看这个答案,看看它是否有帮助stackoverflow.com/questions/1144051/… 如果您正在运行 SQL 2008+,您可以将服务器名称、数据库名称和用户名添加到 select 语句中。您需要确保您在连接中使用的登录名可以访问其他服务器。您的 sql 将类似于“从 [服务器名称].[数据库名称].[架构名称(可能是 dbo)].View 插入表中选择 *”

标签: vb6


【解决方案1】:

这是行不通的,因为即使您将记录从第一台服务器拉到记录集中,您也试图直接从视图中插入,而不是从记录集中插入。

您可以循环访问您的记录集,并将记录一个一个地插入到另一个数据库中,但是这样需要多次往返并且非常慢。更好的方法是使用UpdateBatch 从记录集中一次性插入。基本思路如下:

cn1.ConnectionString = "Server1"
cn2.ConnectionString = "Server2"
sql = "SELECT * FROM VIEW"
Set rs.ActiveConnection = cn1

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient 'you need a client-side recordset

rs1.Open sql, cn1, adLockBatchOptimistic 'you need to set the locktype to this

Set rs.ActiveConnection = cn2 'now you're connecting your recordset to the other server
rs.UpdateBatch                'and updating the database all in one batch

这应该让你开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多