跨数据库的事务如何处理?

QDZZQ 2005-01-07 09:22:07
类似下面语句:

BEGIN TRAN
insert into DB_B.dbo.Table1 select * from DB_A.dbo.Table1 where age>30

delete from DB_A.dbo.Table1 where age>30


COMMIT TRAN


如何做到DB_B中插入失败,则DB_A中不删除?
上面代码好像事务不起作用
...全文
522 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mschen 2005-01-07
  • 打赏
  • 举报
回复
SET XACT_ABORT ON
GO
BEGIN TRAN
insert into DB_B.dbo.Table1 select * from DB_A.dbo.Table1 where age>30

delete from DB_A.dbo.Table1 where age>30
COMMIT TRAN
GO

用当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。

聪明的一休 2005-01-07
  • 打赏
  • 举报
回复
BEGIN TRAN
INSERT DB_B.dbo.Table1 SELECT * FROM DB_A.dbo.Table1 WHERE age > 30
IF @@error <> 0 ROLLBACK

DELETE DB_A.dbo.Table1 WHERE age > 30
IF @@error <> 0 ROLLBACK
ELSE COMMIT
NinGoo 2005-01-07
  • 打赏
  • 举报
回复
BEGIN TRAN
insert into DB_B.dbo.Table1 select * from DB_A.dbo.Table1 where age>30

IF @@error<>0
Rollback tran

delete from DB_A.dbo.Table1 where age>30


COMMIT TRAN

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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