是你自己處理得不好了,你那樣寫代碼不規范
給你一個例子看,你就知道了
CREATE PROC dbo.procInsert 
(@orderNo varchar(4),@orderName varchar(20),@orderNum numeric(10,2))
AS
BEGIN TRAN
SET NOCOUNT ON
SET ANSI_WARNINGS OFFINSERT INTO  dbo.TabX(order_no,order_name,order_num)
VALUES(@OrderNo,@OrderName,@OrderNum)IF @@ERROR<>0  GOTO errhandle---->發生錯誤直接跳轉到後面,不發生錯誤提交
COMMIT TRAN
SELECT 1errhandle:
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
SELECT 0
ENDGO--成功返回1,失敗返回0

解决方案 »

  1.   

    这样就可以了,最好的解决办法:
    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
    declare @retcode int
    select @retcode = 1
    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
                select @retcode = 0
                goto L_end
             end     update website_fenlei set num=num+1 where fid=@newfid --二级分类+1
            
           if @@error<>0  --有错误进行回滚
              begin
               select @retcode = 0
                goto L_end
             end      update website_fenlei set num=num+1 where fid=substring(@newfid,1,2)+'00' --一级分类+1
            
           if @@error<>0  --有错误进行回滚
              begin
               select @retcode = 0
                goto L_end
             end       update website_fenlei set num=num-1 where fid=@fid --二级分类-1
            
           if @@error<>0  --有错误进行回滚
              begin
                select @retcode = 0
                goto L_end
             end      update website_fenlei set num=num-1 where fid=substring(@fid,1,2)+'00' --一级分类-1
            
           if @@error<>0  --有错误进行回滚
              begin
               select @retcode = 0
                goto L_end
             end
           
     
      L_end:
    if @retcode = 1 
                 commit tran
    else
         rollback tran
    return @retcode
    end
    GO