关于在存储过程中使用rollback的问题
CREATE PROCEDURE sp_website_modi --网址大全修改
@id int,
@name nvarchar(100),
@fid nvarchar(4), --原fid
@newfid nvarchar(4), --新fid
@iscolor int=0,
@isindex int=0,
@url nvarchar(100)=null,
@description nvarchar(2000)=null
as
set nocount on
begin
begin tran
update website set name=@name,fid=@newfid,iscolor=@iscolor,isindex=@isindex,url=@url,description=@description where id=@id
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num+1 where fid=@newfid --二级分类+1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num+1 where fid=substring(@newfid,1,2)+'00' --一级分类+1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num-1 where fid=@fid --二级分类-1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num-1 where fid=substring(@fid,1,2)+'00' --一级分类-1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
commit tran
return 1
end
GO
在这个过程中每做一次数据处理都调用rollback这样很不好,如果只用一次rollback,任何一条语句处理出了问题都回滚
@id int,
@name nvarchar(100),
@fid nvarchar(4), --原fid
@newfid nvarchar(4), --新fid
@iscolor int=0,
@isindex int=0,
@url nvarchar(100)=null,
@description nvarchar(2000)=null
as
set nocount on
begin
begin tran
update website set name=@name,fid=@newfid,iscolor=@iscolor,isindex=@isindex,url=@url,description=@description where id=@id
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num+1 where fid=@newfid --二级分类+1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num+1 where fid=substring(@newfid,1,2)+'00' --一级分类+1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num-1 where fid=@fid --二级分类-1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
update website_fenlei set num=num-1 where fid=substring(@fid,1,2)+'00' --一级分类-1
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 0 --返回0表示添失败
end
commit tran
return 1
end
GO
在这个过程中每做一次数据处理都调用rollback这样很不好,如果只用一次rollback,任何一条语句处理出了问题都回滚
...全文
相关推荐
oracle触发器调用存储过程
Oracle触发器调用存储过程可以通过使用自治事务来解决事务隔离性问题,确保业务逻辑的正确执行。但是,需要注意自治事务的使用规则和注意事项,以避免出现问题。
SQLServer存储过程中事务的使用方法
通过上述方式,我们可以确保在存储过程中的一系列操作要么全部成功,要么在遇到问题时全部撤销,从而保证了数据的完整性和一致性。
Oracle存储过程调测及job使用指导
在调测过程中,可以使用Step into和Step over来逐步执行代码,观察变量值的变化,以便找出潜在问题。特别是当内部调用的子程序返回错误或者遇到异常处理代码时,可能是问题所在。
oracle存储过程语法
以上就是关于Oracle存储过程的基本语法及其应用的详细介绍,通过这些知识点的学习,可以帮助开发人员更好地理解和使用Oracle存储过程来解决复杂的数据处理问题。
mysql存储过程事务管理简析
例如,可以编写一个存储过程来执行一系列数据库操作,如果其中任何一步失败,整个过程可以通过ROLLBACK回滚到初始状态,从而保持数据一致性。



