• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

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

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中不删除?
上面代码好像事务不起作用
...全文
233 点赞 收藏 3
写回复
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
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告