请教一个SQL存储过程判断问题,谢谢

talentmykaka 2016-04-20 09:36:39
我有一个存储过程
CREATE PROCEDURE [dbo].[SP_TEST]
AS

INSERT T1 (A1,A2,A3,B1,B2,B3)
SELECT A1,A2,A3,B1,B2,B3 FROM T2 WHERE B3='1';

UPDATE T2 SET B4=GETDATE()
WHERE B3='1';

UPDATE T3 SET B4=GETDATE()
WHERE A1 IN ( SELECT A1 FROM T2 WHERE B3='1' );

GO
--------------------------------------
如何在存储过程中判断3个语句都执行完毕?
如果三条语句都执行成功,则返回 0
如果其中只要有语句报错,则回滚,并返回错误-1

这个判断应该如何写啊,谢谢


...全文
290 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingtiy 2016-05-14
  • 打赏
  • 举报
回复

set xact_abort on
try catch
lbyeye 2016-05-12
  • 打赏
  • 举报
回复
都是高手,学习了
  • 打赏
  • 举报
回复
Alter PROCEDURE [dbo].[SP_TEST]
( @RetVal int=0 output)
AS
Begin

Begin TRANSACTION

INSERT T1 (A1,A2,A3,B1,B2,B3)
SELECT A1,A2,A3,B1,B2,B3 FROM T2  WHERE B3='1';

If @@ERROR<>0
Goto Errm

UPDATE T2 SET B4=GETDATE()
WHERE B3='1';

If @@ERROR<>0
Goto Errm

UPDATE T3 SET B4=GETDATE()
WHERE A1 IN ( SELECT A1 FROM T2  WHERE B3='1' );

If @@ERROR<>0
Goto Errm

COMMIT TRANSACTION
    
Return @Retval  

ErrM:   
ROLLBACK TRANSACTION     
Set @Retval = -1  
Return @Retval  

End
GO
Ginnnnnnnn 2016-04-20
  • 打赏
  • 举报
回复
使用try catch 即可
习惯性蹭分 2016-04-20
  • 打赏
  • 举报
回复

alter PROCEDURE [dbo].[SP_TEST]
AS
begin try
begin tran
INSERT T1 (A1,A2,A3,B1,B2,B3)
SELECT A1,A2,A3,B1,B2,B3 FROM T2  WHERE B3='1';

UPDATE T2 SET B4=GETDATE()
WHERE B3='1';

UPDATE T3 SET B4=GETDATE()
WHERE A1 IN ( SELECT A1 FROM T2  WHERE B3='1' );

commit tran
return 0
end try
begin catch
 rollback 
 return -1
end catch
习惯性蹭分 2016-04-20
  • 打赏
  • 举报
回复

alter PROCEDURE [dbo].[SP_TEST]
AS
begin try
begin tran
INSERT T1 (A1,A2,A3,B1,B2,B3)
SELECT A1,A2,A3,B1,B2,B3 FROM T2  WHERE B3='1';

UPDATE T2 SET B4=GETDATE()
WHERE B3='1';

UPDATE T3 SET B4=GETDATE()
WHERE A1 IN ( SELECT A1 FROM T2  WHERE B3='1' );

commit tran
end try
begin catch
 rollback 
 raiserror('出错了',16,1)
end catch

34,838

社区成员

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

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