我现在用的是:(ADO recordset)
1、先从一个服务器中取出结果集
2、把结果集的数据一条一条的读出来,取出字段的值,然后组合成SQL语句
3、用connection 的 execute 方法执行 SQL 语句这样可以实现,但是很麻烦,有谁知道还有什么更简单更快捷的方法可以实现呢,呵呵,最好一个SQL 语句实现或者,直接把 recordset 赋给它,各位高手多指教

解决方案 »

  1.   

    下面的示例访问来自某个表的数据,该表在 SQL Server 的另一个实例中。SELECT   *
    FROM      OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=ServerName;User ID=MyUID;Password=MyPass'
             ).Northwind.dbo.Categories
      

  2.   


    在你的sql server查询分析器里运行:
    SELECT   *
    into 你的表
    FROM      OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=服务器名;User ID=用户名;Password=密码'
             ).数据库.dbo.表名
      

  3.   

    OPENDATASOURCE
    不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分对象名的一部分。语法
    OPENDATASOURCE ( provider_name, init_string )参数
    provider_name注册为用于访问数据源的 OLE DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默认值。init_string连接字符串,这些字符串将要传递给目标提供程序的 IDataInitialize 接口。提供程序字符串语法是以关键字值对为基础的,这些关键字值对由分号隔开,例如:"keyword1=value; keyword2=value."在 Microsoft® Data Access SDK 中定义了基本语法。有关所支持的特定关键字值对的信息,请参见提供程序中的文档。下表列出 init_string 参数中最常用的关键字。关键字 OLE DB 属性 有效值和描述 
    数据源 DBPROP_INIT_DATASOURCE 要连接的数据源的名称。不同的提供程序用不同的方法对此进行解释。对于 SQL Server OLE DB 提供程序来说,这会指明服务器的名称。对于 Jet OLE DB 提供程序来说,这会指明 .mdb 文件或 .xls 文件的完整路径。 
    位置 DBPROP_INIT_LOCATION 要连接的数据库的位置。 
    扩展属性 DBPROP_INIT_PROVIDERSTRING 提供程序特定的连接字符串。 
    连接超时 DBPROP_INIT_TIMEOUT 超时值,在该超时值后,连接尝试将失败。 
    用户 ID DBPROP_AUTH_USERID 用于该连接的用户 ID。 
    密码 DBPROP_AUTH_PASSWORD 用于该连接的密码。 
    目录 DBPROP_INIT_CATALOG 连接到数据源时的初始或默认的目录名称。 
    注释
    OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用。因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECT、INSERT、UPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。与 OPENROWSET 函数类似,OPENDATASOURCE 应该只引用那些不经常访问的 OLE DB 数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论 OPENDATASOURCE 还是 OPENROWSET 都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用 OPENDATASOURCE 时,都必须提供所有的连接信息(包括密码)。示例
    下面的示例访问来自某个表的数据,该表在 SQL Server 的另一个实例中。SELECT   *
    FROM      OPENDATASOURCE(
             'SQLOLEDB',
             'Data Source=ServerName;User ID=MyUID;Password=MyPass'
             ).Northwind.dbo.Categories下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
     请参见分布式查询OPENROWSETsp_addlinkedserver©1988-2000 Microsoft Corporation。保留所有权利。
      

  4.   

    rs1.Open "select * from " & Table1, cn1, adOpenStatic, adLockReadOnly
          rs2.Open "select * from " & Table2, cn2, adOpenForwardOnly, adLockPessimistic      intFields = rs1.Fields.Count - 1      For k = 1 To rs1.RecordCount
            rs2.AddNew        For j = 0 To intFields
              rs2.Fields(j).Value = rs1.Fields(j).Value
            Next
            
            rs2.UpdateBatch
            rs1.MoveNext
          Nextcn1和cn2为两个数据库的数据连接
      

  5.   

    谢谢各位,我整理了一下,以帮助后来人:
        Dim cnnTarget As ADODB.Connection
        Dim rstTarget As ADODB.Recordset    Dim gs_cnn_target As String
        Dim ls_SQL As String
        
        gs_cnn_target = "PROUIDER=MSDASQL;Driver=SQL Server;Server=Cooner" _
            & ";UID=sa;PWD=;DATABASE=db_test_target"
           
        Set cnnTarget = New ADODB.Connection
        cnnTarget.Open gs_cnn_target
        
        ls_SQL = "insert into test_table_target select * from OPENDATASOURCE( 'SQLOLEDB','Data Source=Server_db;User ID=sa;PassWord=').db_test_source.dbo.test_table_target"    'Connect to the target server
        Set cnnTarget = New ADODB.Connection
        cnnTarget.Open gs_cnn_target
        cnnTarget.Execute ls_SQL
        cnnTarget.close