用OPENDATASOURCEinsert into OPENDATASOURCE('SQLOLEDB','Data Source=192.168.0.12;User ID=;Password=').DataBase.dbo.tablexselect * from bb

解决方案 »

  1.   

    Conn.Open conString
          Conn.BeginTrans
          Err.Number = 0
             sqlString = "SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.16.3.16'; 'sa'; 'a', tjdb.dbo.prostock)"
          Conn.Execute sqlString
          
          If Err.Number = 0 Then
             Conn.CommitTrans
             MsgBox "成功清空本地数据库记录!"
          Else
             Conn.RollbackTrans
             MsgBox "请重新操作!"
          End If
          
          Conn.Close
      

  2.   

    反过来也一样做呀insert into prostockselect * from 
        OPENDATASOURCE('SQLOLEDB','Data Source=192.168.0.12;User ID=;Password=').DataBase.dbo.tablex
      

  3.   

    yown(yong) 谢谢
    测试出现如下错误;实时错误' -2147217900 (80040e14)';
    [OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]
      

  4.   

    Conn.Open conString
    '      Conn.BeginTrans
          Err.Number = 0
             sqlString = "set xact_abort on " & vbcrlf & _ 
    "BEGIN DISTRIBUTED TRANSACTION " & vbcrlf & _ 
    "SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.16.3.16'; 'sa'; 'a', tjdb.dbo.prostock) " &  vbcrlf & _ 
    "commit tran"
          Conn.Execute sqlString
          
          If Err.Number = 0 Then
    '         Conn.CommitTrans
             MsgBox "成功清空本地数据库记录!"
          Else
    '         Conn.RollbackTrans
             MsgBox "请重新操作!"
          End If
          
          Conn.Close
      

  5.   

    在两个sql实例之间进行数据处理,要使用分布式事务,而不能使用普通事务,你可以试试上面的处理方式.
      

  6.   

    zjcxc(邹建)我的代码如下:
    Conn.Open conString
    '      Conn.BeginTrans
          Err.Number = 0
             sqlString = "set xact_abort on " & vbCrLf & _
                "BEGIN DISTRIBUTED TRANSACTION " & vbCrLf & _
                "SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.1.6.7'; 'sa'; 'a', tjdb.dbo.prostock) " & vbCrLf & _
                "commit tran"
          Conn.Execute sqlString
          
          If Err.Number = 0 Then
    '         Conn.CommitTrans
             MsgBox "成功清空本地数据库记录!"
          Else
    '         Conn.RollbackTrans
             MsgBox "请重新操作!"
          End If
          
          Conn.Close
    .......................
    我测试了代码还是出现如下错误
    实时错误' -2147217900 (80040e14)';
    [OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]set xact_abort on 这是什么意思我不明白,我就照抄了,
      

  7.   

    怎么会还有事务呢?,你在查询分析器中去执行下面这段代码,看看能否成功set xact_abort on
    BEGIN DISTRIBUTED TRANSACTION
    SELECT * INTO prostock FROM OPENROWSET('SQLOLEDB', '61.1.6.7'; 'sa'; 'a', tjdb.dbo.prostock)
    commit tran
      

  8.   

    查询分析器中.......命令已成功完成。
    在企业管理器中执行SQL 出现错误代码相同:我的本地是MSDE是不是不能做这些事情。
      

  9.   

    实时错误' -2147217900 (80040e14)';
    [OLE/DB provider returned message:新事务不能登记到指定的事务处理中。]
    是分布式事务的问题的!
      

  10.   

    我改动了我的程序成功了,但执行SQL时必须把本地表删除才能做从网上导入本地,
    实际上我是想把本地与网络的数据库不同点上传下载,而不是把全部的记录更新,不知如何做。
    我想这样做但是不行
    SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a', tjjsc.qingming.( select * from promove where id>5) )
    这样做是出错如何改动谢谢
      

  11.   

    SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5')
      

  12.   

    --不是很明白你的意思,估计你是想要这样的结果吧if exists(select * from sysobjects where name='promove')
    begin  --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
    insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5')
    end
    else  --如果不存在,直接创建
    begin
    SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where id>5')
    end
      

  13.   

    本地
    a    b     c     d
    1    2     3     4      
    2    4     5     6     
    3    3     2     3
    4    2     3     4      
    5    4     5     6     
    6    3     2     3
    网上
    a    b     c     d
    1    2     3     4      
    2    4     5     6     
    3    3     2     3
    我想把本地的数据库,4,5,6条上传到网上。
      

  14.   

    --假设是在网上的服务器执行.if exists(select * from sysobjects where name='promove')
    begin  --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
    insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) a
    where not exists(select * from promove where id=a.id)
    end
    else  --如果不存在,直接创建
    begin
    SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove)
    end
      

  15.   

    首先在本地创建一张和远程表相同的表:promove 然后,将远程表中的数据不和本地的数据相同的记录写入到本地表promoveinsert into promove
    select * from  OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove 
    where id not in(select id from promove)
      

  16.   

    --加条件嘛.if exists(select * from sysobjects where name='promove')
    begin  --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
    insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where c=5') a
    where not exists(select * from promove where id=a.id)
    end
    else  --如果不存在,直接创建
    begin
    SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a','select * from tjjsc.qingming.promove where c=5')
    end
      

  17.   

    出现如下错误:
    [OLE/DB provider returned message:无法完成延迟准备。]
      

  18.   

    不明白,要不你试试把条件加在外面if exists(select * from sysobjects where name='promove')
    begin  --如果表存在,则更新(至于如何更新处理,就要看你如何定处理规则了)
    insert promove SELECT * FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) a
    where c=5 and not exists(select * from promove where id=a.id)
    end
    else  --如果不存在,直接创建
    begin
    SELECT * INTO promove FROM OPENROWSET('SQLOLEDB', '12.12.12.12'; 'sa'; 'a',tjjsc.qingming.promove) where c=5
    end