2011-05-13 67 views
1

我具有相同的本地和遠程數據庫結構,並使用 鏈接的服務器連接到遠程數據庫。 我的本地數據庫SQL2000和遠程一個是SQL2008 我的本地表:正在使用交易與鏈接服務器通信良好?

tbl_name 
Id  Name   flag 
1  Raymond   1 
2  Sara   1 
3  Souzan   2 

我的遠程表

tbl_name 
Id  Name 

現在我要插入每一條記錄與falg field值= 1到遠程表,然後刪除本地數據庫中插入的記錄。

create proc TransferInsertedRecords 
    as 
    begin 
     create temp @table 
     (
      id int, 
      name nvarchar(10) 
     ) 
     insert into @temp 
      select id,name from tbl_name 
        where flag=1 
     Insert into RemoteServer.dbo.Worker.tbl_Names.name 
     values select name from @temp 

     delete from t1 
       from tbl_name t1 
        inner join @temp t2 
          on t1.id=t2.id and flag=1 
end 

我有一個工作,每5分鐘運行一次這個程序。 如何確保遠程數據庫中的每個插入記錄都將在本地數據庫中刪除? 我的意思是關於連接丟失。假設一些數據被插入到遠程數據庫中,但是在插入其餘數據並在本地數據庫中刪除它們之前,連接會丟失。

如果是的話,我應該使用DISTRIBUTED TRANSACTION哪裏應該放COMMIT TRANSACTION or ROLLBACk聲明。

回答

1

是的,使用DISTRIBUTED TRANSACTION,這是確保您的更改能夠正常工作的唯一方法。

DISTRIBUTED TRANSACTION應該能夠處理連接失敗,在這種情況下,您將檢測到錯誤並回滾。

+0

我應該在哪裏根據我的代碼放置CoMMIT和ROLLBACK? – 2011-05-13 17:54:10