关于在存储过程中使用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,任何一条语句处理出了问题都回滚