请帮我看一下这个触发器有什么问题?我调试了一下,程序老是回滚,是不是@@ERRORS那里出了问题!CREATE TRIGGER t_Ins_RepD35 ON Rep_D35
FOR INSERT
AS
--定义变量SQL Server 或Sybase 以@开头定义变量
 Declare                            @ls_msg varchar(255),
       @li_rowdeleted int,
                               @StockQty           int,
                            @Qty                int
Select  @StockQty= Rep_D36.库存数量 From Rep_D36,InSerted  Where Rep_D36.品名=InSerted.品名Select  @Qty=InSerted.数量 from InSerted
if  @@error <> 0 Or @StockQty<@Qty
    Begin
     ---对@ls_msg赋值
     Select @ls_msg = '已没有库存,请确认!' 
     goto fail_
   End
--给@li_rowdeleted赋值
 
    Update Rep_D36  Set Rep_D36.库存数量=Rep_D36.库存数量-InSerted.数量
    From Rep_D36,InSerted
    Where Rep_D36.品名=InSerted.品名
--通过系统变量@@error和@@rowcoount来判断程序是否出错
   If @@error <> 0 
   Begin
Select @ls_msg = '更新Rep_D36数据时出错(可能Rep_D35与Rep_D36是否匹配)'
Goto fail_
   End
--错误处理
 fail_:
RollBack Transaction  --回滚事务
Return ---停止运行程序

解决方案 »

  1.   

    CREATE TRIGGER t_Ins_RepD35 ON Rep_D35
    FOR INSERT
    AS
    begin Transaction
    --定义变量SQL Server 或Sybase 以@开头定义变量Declare @ls_msg varchar(255),@li_rowdeleted int,@StockQty int,@Qty  intSelect  @StockQty= Rep_D36.库存数量 From Rep_D36,InSerted  Where Rep_D36.品名=InSerted.品名Select  @Qty=InSerted.数量 from InSerted
    if  @@error <> 0 Or @StockQty<@Qty
        Begin
         ---对@ls_msg赋值
         Select @ls_msg = '已没有库存,请确认!' 
         goto fail_
       End
    --给@li_rowdeleted赋值
     
        Update Rep_D36  Set Rep_D36.库存数量=Rep_D36.库存数量-InSerted.数量
        From Rep_D36,InSerted
        Where Rep_D36.品名=InSerted.品名
    --通过系统变量@@error和@@rowcoount来判断程序是否出错
       If @@error <> 0 
       Begin
    Select @ls_msg = '更新Rep_D36数据时出错(可能Rep_D35与Rep_D36是否匹配)'
    Goto fail_
       End
    ELSE
    Goto COMMIT_
    --错误处理
     fail_:
    RollBack Transaction  --回滚事务
    Return ---停止运行程序COMMIT_:
    COMMIT Transaction
    Return ---停止运行程序