服务器Server1.数据库T_test1.表1
  F_id   F_code      F_name     F_state
   1      001         aaaa        0
   2      002         bbbb        0
   3      003         cccc        0
   4      004         dddd        0服务器Server2.数据库T_test2.表2
   F_id   F_code      F_name     F_state
用事务把表1的记录插入到表2中,同时把表1中成功插入了的记录的F_state改为1SET XACT_ABORT ON 
begin tran
insert into OPENDATASOURCE ('SQLOLEDB','Data Source=server2;User ID=sa;Password=').test2.DBO.表2 (F_code,F_name) 
select F_code,F_name from T_specif @@error=0
begin
 update T_test1 set F_state=1 
 commit tran
end
else
begin 
 rollback tran
end
SET XACT_ABORT off
go
上面的语句总是把所有的记录都插入,这条件不知道怎么加,比如说我选择前两条记录插入到表2中,同时把表1的这两条记录的F_state改为1,其它记录不变,上面的语句把所有的记录都插入了,怎么做呢?

解决方案 »

  1.   

    上面语句写错了,应该是
    SET XACT_ABORT ON 
    begin tran
    insert into OPENDATASOURCE ('SQLOLEDB','Data Source=server2;User ID=sa;Password=').test2.DBO.表2 (F_code,F_name) 
    select F_code,F_name from T_test1if @@error=0
    begin
     update T_test1 set F_state=1 
     commit tran
    end
    else
    begin 
     rollback tran
    end
    SET XACT_ABORT off
    go
      

  2.   

    SET XACT_ABORT ON 
    begin tran
    insert into OPENDATASOURCE ('SQLOLEDB','Data Source=server2;User ID=sa;Password=').test2.DBO.表2 (F_code,F_name) 
    select top 2 1,F_name from T_test1if @@error=0
    begin
     update T_test1 set F_state=1 
     commit tran
    end
    else
    begin 
     rollback tran
    end
    SET XACT_ABORT off
    go
      

  3.   

    SET XACT_ABORT ON 
    begin tran
    insert into OPENDATASOURCE ('SQLOLEDB','Data Source=server2;User ID=sa;Password=').test2.DBO.表2 (F_code,F_name) 
    select F_code,F_name from T_test1
    update T_test1 set F_state=1 
    commit tran
    SET XACT_ABORT off