sql server带回滚的存储过程 求教

qq_24387221 2016-03-16 01:54:43
现在要把A表的数据归档到B表中,
先把符合条件的数据从A表插入得到B表,
再从A表删除已插入的数据;

现在要求:只有B表插入成功,A表才做删除;否则回滚整个操作 ;
求大神帮写个存储过程
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_24387221 2016-03-17
  • 打赏
  • 举报
回复
引用 5 楼 roy_88 的回复:
[quote=引用 4 楼 qq_24387221 的回复:] [quote=引用 3 楼 roy_88 的回复:] 是嵌套事务么? 可以的 加上ROLLBACK TRAN,漏打了
BEGIN TRY
BEGIN TRAN
 
INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件
 
DELETE A WHERE 1=1--同上条件
 
COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
ROLLBACK TRAN
END CATCH
帮我重打下,我不做开发的,不大懂,因为是生产库上操作,需要谨慎点,不过还会做下测试; 对的,只要在插入B表失败的时候,那么所有插入成功的都回滚,并且不做A表对应的删除,需要符合这个要求就行。[/quote] #3方法已提供了,直接COPY用就行了,指定列和条件[/quote] 谢谢版主,结贴。
中国风 2016-03-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_24387221 的回复:
[quote=引用 3 楼 roy_88 的回复:] 是嵌套事务么? 可以的 加上ROLLBACK TRAN,漏打了
BEGIN TRY
BEGIN TRAN
 
INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件
 
DELETE A WHERE 1=1--同上条件
 
COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
ROLLBACK TRAN
END CATCH
帮我重打下,我不做开发的,不大懂,因为是生产库上操作,需要谨慎点,不过还会做下测试; 对的,只要在插入B表失败的时候,那么所有插入成功的都回滚,并且不做A表对应的删除,需要符合这个要求就行。[/quote] #3方法已提供了,直接COPY用就行了,指定列和条件
qq_24387221 2016-03-16
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
是嵌套事务么? 可以的 加上ROLLBACK TRAN,漏打了
BEGIN TRY
BEGIN TRAN
 
INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件
 
DELETE A WHERE 1=1--同上条件
 
COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
ROLLBACK TRAN
END CATCH
帮我重打下,我不做开发的,不大懂,因为是生产库上操作,需要谨慎点,不过还会做下测试; 对的,只要在插入B表失败的时候,那么所有插入成功的都回滚,并且不做A表对应的删除,需要符合这个要求就行。
qq_24387221 2016-03-16
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
BEGIN TRY
BEGIN TRAN

INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件

DELETE A WHERE 1=1--同上条件

COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
END CATCH
引用 楼主 qq_24387221 的回复:
现在要把A表的数据归档到B表中, 先把符合条件的数据从A表插入得到B表, 再从A表删除已插入的数据; 现在要求:只有B表插入成功,A表才做删除;否则回滚整个操作 ; 求大神帮写个存储过程
引用 楼主 qq_24387221 的回复:
现在要把A表的数据归档到B表中, 先把符合条件的数据从A表插入得到B表, 再从A表删除已插入的数据; 现在要求:只有B表插入成功,A表才做删除;否则回滚整个操作 ; 求大神帮写个存储过程
引用 1 楼 roy_88 的回复:
BEGIN TRY
BEGIN TRAN

INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件

DELETE A WHERE 1=1--同上条件

COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
END CATCH
请问版主,这个CATCH,能在插入失败的失败,回滚整个插入并且不做删除动作吗?
中国风 2016-03-16
  • 打赏
  • 举报
回复
是嵌套事务么? 可以的 加上ROLLBACK TRAN,漏打了
BEGIN TRY
BEGIN TRAN
 
INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件
 
DELETE A WHERE 1=1--同上条件
 
COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
ROLLBACK TRAN
END CATCH
中国风 2016-03-16
  • 打赏
  • 举报
回复
BEGIN TRY
BEGIN TRAN

INSERT INTO B(xx)
SELECT xx FROM A WHERE 1=1--条件

DELETE A WHERE 1=1--同上条件

COMMIT TRAN
END TRY
BEGIN CATCH
RAISERROR(N'出错了',16,1)
END CATCH

34,588

社区成员

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

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