create proc usp_CloseEvent                          
 @UserGUID VARCHAR(40), --当前处理人的GUID                        
 @EventGUID VARCHAR(40),--事件单GUID                        
 @Hb VARCHAR(40), --汇报人                         
 @Jzqk VARCHAR(40), --事件单状况                        
 @res VARCHAR(4000), --处理说明                        
 @CloseCode VARCHAR(40),--关闭代码                       
 @EventQy VARCHAR(40),--事件起因                      
 @FwMethod VARCHAR(10),--服务方式                      
 @FeedBack VARCHAR(4000), --反馈意见            
 @stamp VARCHAR(100),    
 @strET VARCHAR(50),    
 @strE1 VARCHAR(50),             
 @strE2 VARCHAR(50),             
 @strE3 VARCHAR(50)         
                       
AS                        
 DECLARE @count int                          
 DECLARE @strDepartment VARCHAR(40)                        
 DECLARE @strGW VARCHAR(20)                        
 DECLARE @date VARCHAR(24)                
 DECLARE @tstamp bigint                
                 
 begin                          
  SET @date = getdate()                        
  SET @count =0                 
  set xact_abort ON                
                
  SELECT   @strDepartment=CONVERT(varchar(40),DepartmentGUID),@strGW =JobTitle FROM myuser WHERE USERGUID = @UserGUID                
  SELECT   @tstamp =convert(bigint,@stamp)               
             
  BEGIN TRANSACTION                        
                            
    BEGIN                        
    ---插入数据到处理过程                        
    INSERT INTO Itsm_ProcessReport (ProcessGUID,EventGUID,ProcessTime,ProcessContent,Hander,Receiver,Res) VALUES (newid(),@EventGUID,@date,'关闭事件单',@Hb,'',@res)                        
    SET @count = @count + @@ERROR                 
    IF @count <> 0                
   BEGIN                
    GOTO ERRORHANDLE                
   END                
    END                        
    BEGIN                        
    ---更新事件单信息                        
   UPDATE Itsm_EventInfo SET EventStatus  = @Jzqk,OldStatus= @Jzqk, EventQy = @EventQy ,FwMethod = @FwMethod , CloseCode = @CloseCode , FeedBack = @FeedBack, CloseTime = @date , CloserGUID = @UserGUID,EventLevel=@strET,EventLevel1=@strE1,EventLevel2=@strE
2,EventLevel3=@strE3 WHERE EventGUID=@EventGUID  AND CONVERT(bigint,EventStamp) = @tstamp           
          
   IF  @@rowcount=0                
    BEGIN                
     GOTO ERRORBF                
    END                
                
   SET @count = @count + @@ERROR                 
   IF @count <> 0                
    BEGIN                
     GOTO ERRORHANDLE                
    END                         
    END                 
                    
    IF @count=0                
   begin                
    COMMIT TRANSACTION                            
    SELECT  'SUCCESS'                
   end                
                      
   ERRORHANDLE:                
   begin                
    ROLLBACK TRANSACTION                
    SELECT 'FAILED'                
   END                
                   
   ERRORBF:                
   begin                
    ROLLBACK TRANSACTION                
    SELECT 'BF'                
   end                
  END        
    

解决方案 »

  1.   

    这一段加上return    IF @count=0                
       begin                
        COMMIT TRANSACTION                            
        SELECT  'SUCCESS'  
        RETURN              
       end     
      

  2.   

    try this,create proc usp_CloseEvent                          
     @UserGUID VARCHAR(40), --当前处理人的GUID                        
     @EventGUID VARCHAR(40),--事件单GUID                        
     @Hb VARCHAR(40), --汇报人                         
     @Jzqk VARCHAR(40), --事件单状况                        
     @res VARCHAR(4000), --处理说明                        
     @CloseCode VARCHAR(40),--关闭代码                       
     @EventQy VARCHAR(40),--事件起因                      
     @FwMethod VARCHAR(10),--服务方式                      
     @FeedBack VARCHAR(4000), --反馈意见            
     @stamp VARCHAR(100),    
     @strET VARCHAR(50),    
     @strE1 VARCHAR(50),             
     @strE2 VARCHAR(50),             
     @strE3 VARCHAR(50)         
                           
    AS                        
     DECLARE @count int                          
     DECLARE @strDepartment VARCHAR(40)                        
     DECLARE @strGW VARCHAR(20)                        
     DECLARE @date VARCHAR(24)                
     DECLARE @tstamp bigint                
                     
     begin                          
      SET @date = getdate()                        
      SET @count =0                 
      set xact_abort ON                
                    
      SELECT   @strDepartment=CONVERT(varchar(40),DepartmentGUID),@strGW =JobTitle FROM myuser WHERE USERGUID = @UserGUID                
      SELECT   @tstamp =convert(bigint,@stamp)               
                 
      BEGIN TRANSACTION                        
                                
        BEGIN                        
        ---插入数据到处理过程                        
        INSERT INTO Itsm_ProcessReport (ProcessGUID,EventGUID,ProcessTime,ProcessContent,Hander,Receiver,Res) VALUES (newid(),@EventGUID,@date,'关闭事件单',@Hb,'',@res)                        
        SET @count = @count + @@ERROR                 
        IF @count <> 0                
       BEGIN                
        GOTO ERRORHANDLE                
       END                
        END                        
        BEGIN                        
        ---更新事件单信息                        
       UPDATE Itsm_EventInfo SET EventStatus  = @Jzqk,OldStatus= @Jzqk, EventQy = @EventQy ,
       FwMethod = @FwMethod , CloseCode = @CloseCode , FeedBack = @FeedBack, CloseTime = @date , 
       CloserGUID = @UserGUID,EventLevel=@strET,EventLevel1=@strE1,EventLevel2=@strE2,EventLevel3=@strE3 
       WHERE EventGUID=@EventGUID  AND CONVERT(bigint,EventStamp) = @tstamp           
              
       IF  @@rowcount=0                
        BEGIN                
         GOTO ERRORBF                
        END                
                    
       SET @count = @count + @@ERROR                 
       IF @count <> 0                
        BEGIN                
         GOTO ERRORHANDLE                
        END                         
        END                 
                        
        IF @count=0                
       begin                
        COMMIT TRANSACTION                            
        SELECT  'SUCCESS'                
       end   
                 
       return  
                     
       ERRORHANDLE:                
       begin                
        ROLLBACK TRANSACTION                
        SELECT 'FAILED'                
       END                
                       
       ERRORBF:                
       begin                
        ROLLBACK TRANSACTION                
        SELECT 'BF'                
       end                
      END 
      

  3.   

    我觉得在ERRORHANDLE:                
       begin                
        ROLLBACK TRANSACTION                
        SELECT 'FAILED'                
       END                
                       
       ERRORBF:                
       begin                
        ROLLBACK TRANSACTION                
        SELECT 'BF'                
       end               
    也要加上return
      

  4.   

    ERRORHANDLE:                
       begin                
        ROLLBACK TRANSACTION                
        SELECT 'FAILED'                
       END                
                       
       ERRORBF:                
       begin                
        ROLLBACK TRANSACTION                
        SELECT 'BF'                
       end               是不是也要加上return