我有相同的本地和远程数据库结构,我使用连接到远程数据库 链接服务器。 我的本地数据库是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
语句。
答案 0 :(得分:1)
是的,使用DISTRIBUTED TRANSACTION,这是确保您的更改有效的唯一方法。
DISTRIBUTED TRANSACTION应该能够处理连接失败,在这种情况下,您将检测错误和回滚。