使用事务与链接服务器通信好吗?

时间:2011-05-13 08:34:38

标签: sql-server transactions sql-server-2000

我有相同的本地和远程数据库结构,我使用连接到远程数据库 链接服务器。 我的本地数据库是SQL2000,远程的是SQL2008 我当地的表:

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

我的远程表

tbl_name
Id       Name

现在我想将falg field value = 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 个答案:

答案 0 :(得分:1)

是的,使用DISTRIBUTED TRANSACTION,这是确保您的更改有效的唯一方法。

DISTRIBUTED TRANSACTION应该能够处理连接失败,在这种情况下,您将检测错误和回滚。