看一看Sql里自带的存储过程,好像有类似的例子。

解决方案 »

  1.   

    使用事务控制,发生错误后回滚,下面有一个MSSQL存储过程例子,你可以参考一下:CREATE PROCEDURE prc_RollMonth 
    @Year_I int,
    @Month_I int
    AS
    begin transaction trans      /*开始事务*/
    /*************************************************/
    /*对数据库的操作,换成你具体执行的更新操作*/
    INSERT INTO T_ScheduleReceive
          (no_c, date_dt, ReceivePlantID_I)
    SELECT dbo.T_ScheduleSend.No_C AS no_c, dbo.T_ScheduleSend.Date_DT AS date_dt, 
          dbo.T_ScheduleSend_Item.ReceivePlantID_I AS receiveplantid_i
    FROM dbo.T_ScheduleSend INNER JOIN
          dbo.T_ScheduleSend_Item ON 
          dbo.T_ScheduleSend.ID_I = dbo.T_ScheduleSend_Item.ScheduleSendID_I
    WHERE (dbo.T_ScheduleSend.Rolled_B = 0)
    GROUP BY dbo.T_ScheduleSend.No_C, dbo.T_ScheduleSend.Date_DT, 
          dbo.T_ScheduleSend_Item.ReceivePlantID_IUpdate  dbo.T_SpecialSchedule set Rolled_B=1
    WHERE  Rolled_b=0
    /************************************************/
    if @@error=0  /*判断是否发生错误*/
    commit transaction trans  /*没有发生错误则提交事务*/
    else 
    rollback transaction trans  /*发生错误则回滚事务*/GO