操作两个数据库,如何同时提交或者同时回滚?

megnet 2002-12-18 08:56:22
有两个数据库db1,db2,
都有一个相同的表A: 名称, 数量。
现在想要写一个处理过程,要把db1的表A的数量 -10,同时把db2的表A的数量+10,要把这个处理过程写成同步的,即两个数据库同时提交或者同时回滚,不能产生一个操作成功,一个操作失败的情况。
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyFor 2002-12-18
  • 打赏
  • 举报
回复
delcare @er1 int,@er2 int
BEGIN TRANSACTION
Update table1......
select @er1=@@error
Update table2......
select @er2=@@error
if @er1=0 and @er2=0
COMMIT TRANSACTION
else
ROLLBACK TRANSACTION
hjhing 2002-12-18
  • 打赏
  • 举报
回复
create procedure myP
as

begin tran
update db1.dbo.tableA
set qty =qty-10
if @eeror<>0

rollback

else
update db2.dbo.tableB
set qty=qty+10
end

if @error<>0
rollback
else
commit tran


----exec myP

liuzwei 2002-12-18
  • 打赏
  • 举报
回复
做成事务,在一个事务中同时操作两个数据库的表
l_agang 2002-12-18
  • 打赏
  • 举报
回复
做服务器连接用sp_addlinkedserver
假设以下操作在DB2所在的服务器上进行
sp_addlinkedserver 'db1ServerName',N'SQL Server'
go
create procedure YourProcedureName
as
declare @DB1Err int
begin tran
insert db1ServerName.DB1..表名 values (....)
set @DB1Err=@@error
insert DB2..表名 values (....)
if @DB1Err<>0 or @@error<>0
rollback tran

commit tran
go
prfonefordb 2002-12-18
  • 打赏
  • 举报
回复
使用链接服务器的效果是不是等同于分布式事务呢?
按照各位高手的回复来看,与基于一台服务器的实现方式类似,利用了事务,
那么这个事务是分布式的吗?需要MTS的协助吗?
samuelpan 2002-12-18
  • 打赏
  • 举报
回复
db1和db2在不同的机器上,db1和db2之间作个链接服务器就可以了
pengdali 2002-12-18
  • 打赏
  • 举报
回复
declare @aa int

begin tran
insert 库名1..表名 values (....)
set @aa=@@error
insert 库名2..表名 values (....)
if @aa<>0 or @@error<>0
rollback tran

commit tran
megnet 2002-12-18
  • 打赏
  • 举报
回复
对不起。忘了说明了:db1和db2在不同的机器上。
在db2上用db1.dbo.tableA是访问不到的。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧