--1:事物内设置保存点
--2:使用Try catch 捕获错误
create procedure liangchen
@id varchar(10),
@name varchar(8),
@age int,
@school varchar(50)
as
begin
-- set nocount on --将该参数设置为On,表示不返回计数,
--将该参数设置为Off,表示返回计数,
--语句块结尾加入set nocount off 可以存储过程
begin tran ok --开始一个事物为 ok
--begin try --开始try
-- save tran bcd --保存一个事务点命名为bcd
insert into teacher_1 values(@id , @name , @age , @school)
if @@error <> 0 --判断上一条语句有没有出错
begin --如果出错
rollback tran ok --回滚到ok
commit tran ok --提交事物
end
else --如果没有出错
delete from student_1 where id=@id --执行第二条语句
if @@error <> 0 --判断删除数据有没有出错
begin --如果出错
rollback tran ok --回滚到ok
commit tran ok --提交事物
end
else --如果没有出错
commit tran ok --提交事务
End
9 个解决方案
#1
我有两张表 当要给Teacher表 填一行数据时,就要把ID字段对应的student表删除一行, 第一次 写 这个存储过程,谢谢大家帮助。
上述代码的大概意思是:使用两个if @@error <> 0 来嵌套判断 插入和删除的两个语句; 我不知道我这样可以不;也不知道if @@error <> 0这样用对不对,语法对不对也不知道。
上述代码的大概意思是:使用两个if @@error <> 0 来嵌套判断 插入和删除的两个语句; 我不知道我这样可以不;也不知道if @@error <> 0这样用对不对,语法对不对也不知道。
#2
代码中的 开始Try 被我注释了. 别在意这个。 这个应该怎么写才对呢。
新人 谢谢大家帮助
新人 谢谢大家帮助
#3
这里为会要用保存点?
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
#4
谢谢回复 可是我的想法是 如果第一个插入语句不成功或者错误 那么第二条删除语句就不可以执行并且要回滚,如果第一条语句成功了,但第二条语句没有成功,那么整体也要回滚 ; 这样的话 存储过程应该怎么弄
#5
大神们 在不在 有木有知道的 谢谢啊啊啊啊
#6
顶顶顶顶顶顶
#7
事务就是这样的啊。 第一条失败 就回滚了。第二条失败也会回滚。
#8
谢谢回复 可是我的想法是 如果第一个插入语句不成功或者错误 那么第二条删除语句就不可以执行并且要回滚,如果第一条语句成功了,但第二条语句没有成功,那么整体也要回滚 ; 这样的话 存储过程应该怎么弄
这里为会要用保存点?
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
事务就是这样的啊。 第一条失败 就回滚了。第二条失败也会回滚。
#9
可以不用写,开启xact那个标志。
也可以用try catch 同上层代码一样。有异常则rollback就可以了。
也可以用try catch 同上层代码一样。有异常则rollback就可以了。
#1
我有两张表 当要给Teacher表 填一行数据时,就要把ID字段对应的student表删除一行, 第一次 写 这个存储过程,谢谢大家帮助。
上述代码的大概意思是:使用两个if @@error <> 0 来嵌套判断 插入和删除的两个语句; 我不知道我这样可以不;也不知道if @@error <> 0这样用对不对,语法对不对也不知道。
上述代码的大概意思是:使用两个if @@error <> 0 来嵌套判断 插入和删除的两个语句; 我不知道我这样可以不;也不知道if @@error <> 0这样用对不对,语法对不对也不知道。
#2
代码中的 开始Try 被我注释了. 别在意这个。 这个应该怎么写才对呢。
新人 谢谢大家帮助
新人 谢谢大家帮助
#3
这里为会要用保存点?
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
#4
这里为会要用保存点?
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
#5
大神们 在不在 有木有知道的 谢谢啊啊啊啊
#6
顶顶顶顶顶顶
#7
谢谢回复 可是我的想法是 如果第一个插入语句不成功或者错误 那么第二条删除语句就不可以执行并且要回滚,如果第一条语句成功了,但第二条语句没有成功,那么整体也要回滚 ; 这样的话 存储过程应该怎么弄
这里为会要用保存点?
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
事务就是这样的啊。 第一条失败 就回滚了。第二条失败也会回滚。
#8
谢谢回复 可是我的想法是 如果第一个插入语句不成功或者错误 那么第二条删除语句就不可以执行并且要回滚,如果第一条语句成功了,但第二条语句没有成功,那么整体也要回滚 ; 这样的话 存储过程应该怎么弄
这里为会要用保存点?
最好是一个事务一块就搞定
begin tran
-- 这里是你的处理代码
-- 增加teacher表
-- 删除对应id的其它表
commit tran
事务就是这样的啊。 第一条失败 就回滚了。第二条失败也会回滚。
#9
可以不用写,开启xact那个标志。
也可以用try catch 同上层代码一样。有异常则rollback就可以了。
也可以用try catch 同上层代码一样。有异常则rollback就可以了。