哈哈,这个问题我能看出来,给你改一下!//开始建立
CREATE trigger [orderTri] on [sale_order]
for delete
as
begin
          declare
                        @numrows int,
                        @errno      int,
                        @errmsg    varchar(25)
            select @numrows=@@rowcount
            if @numrows=0
                          return
            delete item
            from sale_order t2,deleted t1
          where t2.order_id=t1.order_id
        return 0
error:
          raiserror @errno @errmsg
          rollback transaction
end
//结束
你的
error:
          raiserror @errno @errmsg
          rollback transaction好象是画蛇添足!哈!哈哈!哈哈哈!

解决方案 »

  1.   

    這個Trigger有很多問題呀!!!
    SQL Server版://开始建立
    CREATE trigger [orderTri] on [sale_order]
    for delete
    as
    begin
              declare
                            @numrows int,
                            @errno      int,
                            @errmsg    varchar(25)
                set @errmsg='This message is custom'
                select @numrows=@@rowcount
                if @numrows=0
                              return
                delete
                from sale_order t2,deleted t1
                where t2.order_id=t1.order_id
              
                SET @errno=@@ERROR
                IF @@error<>0
                   BEGIN
                       raiserror (@errmsg,15,1) --要麼只要@errno,要麼只要@errmsg,關於Raiserror更多的資訊可參考Books On Line.
                       rollback transaction
                   END
    end
    //结束@@表示說這是一個由SQL Server維護的全域變量,對所有的Session都有效。我們雖然也可以Declare @@abc這樣的變量,但不是全域的變量,假的。
      

  2.   

    N_chow(一劍飄香++),Hahahahahaha(哈,哈哈,哈哈哈...),还是不行呢?
    CREATE trigger [orderTri] on [sale_order]
    for delete
    as
    begin
              declare
                            @numrows int,
                            @errno      int,
                            @errmsg    varchar(25)
                set @errmsg='This message is custom'
                select @numrows=@@rowcount
                if @numrows=0
                              return
                delete        //////////我必须在此处指定为delete item才能通过检测
                from sale_order t2,deleted t1
                where t2.order_id=t1.order_id
              
                SET @errno=@@ERROR
                IF @@error<>0
                  BEGIN
                      raiserror (@errmsg,15,1) --要麼只要@errno,要麼只要@errmsg,關於Raiserror更多的資訊可參考Books On Line.
                      rollback transaction
                  END
    end请看上面的delete语句行,指定了delete item,我在SQL Server的企业管理器中删除sale_order表格的一条记录,但是item表格中的记录没有删除,什么原因呢???
      

  3.   

    没注意,你的DELETE语句也有问题!CREATE trigger [orderTri] on [sale_order]
    for delete
    as
    begin
              declare
                            @numrows int,
                            @errno      int,
                            @errmsg    varchar(25)
                set @errmsg='This message is custom'
                select @numrows=@@rowcount
                if @numrows=0
                              return
                delete sale_order
                from sale_order t2,deleted t1
                where t2.order_id=t1.order_id
              
                SET @errno=@@ERROR
                IF @@error<>0
                  BEGIN
                      raiserror (@errmsg,15,1) --要麼只要@errno,要麼只要@errmsg,關於Raiserror更多的資訊可參考Books On Line.
                      rollback transaction
                  END
    end
    看来你是个MM!看来你是个基本SQL都不熟悉的MM!哈!哈哈!哈哈哈!
      

  4.   

    还是有问题,
    CREATE trigger [orderTri] on [sale_order]
    for delete
    as
    begin
              declare
                            @numrows int,
                            @errno      int,
                            @errmsg    varchar(25)
                set @errmsg='This message is custom'
                select @numrows=@@rowcount
                if @numrows=0
                              return
                delete sale_order
                from sale_order t2,deleted t1
                where t2.order_id=t1.order_id
              
                SET @errno=@@ERROR
                IF @errno<>0
                  BEGIN
                      raiserror (@errmsg,15,1) --要麼只要@errno,要麼只要@errmsg,關於Raiserror更多的資訊可參考Books On Line.
                      rollback transaction
                  END
    end
      

  5.   


    Hahahahahaha(哈,哈哈,哈哈哈...):
       用你(2002-1-2 12:39:02)发给的帖子也不行,我在SQL Server企业管理器上删除sale_order中的记录,item中对应的记录也没删除,好怪呀!是不是delete语句的参数还有问题呀?
      

  6.   

    一時大意....更正後的SQL如下:CREATE trigger [orderTri] on [sale_order]
    for delete
    as
    begin
              declare
                            @numrows int,
                            @errno      int,
                            @errmsg    varchar(25)
                set @errmsg='This message is custom'
                select @numrows=@@rowcount
                if @numrows=0
                              return
                delete item
                from item t2,deleted t1
                where t2.order_id=t1.order_id
              
                SET @errno=@@ERROR
                IF @@error<>0
                  BEGIN
                      raiserror (@errmsg,15,1) --要麼只要@errno,要麼只要@errmsg,關於Raiserror更多的資訊可參考Books On Line.
                      rollback transaction
                  END
    end
    //结束
      

  7.   

    执行成功,谢谢两位高手
    Hahahahahaha(哈,哈哈,哈哈哈...)、N_chow(一劍飄香++)
    以后请多多指教 your alis!!!!!
      

  8.   

    再谢,我的EMAIL为:[email protected],有缘投宿