象这样的DELETE的触发器其实都可以按照下面的写法直接写,不用那么复杂。CREATE TRIGGER ToDelnj
ON t_nj
FOR DELETE
AS  
DELETE t_zy
FROM DELETED d INNER JOIN t_zy ON d.njID = t_zy.njID另外一个也可以照着写。

解决方案 »

  1.   

    hycao,谢谢你的回答,顺便再问一下deleted表和inserted表在哪里?
      

  2.   

    Delete t_zy
      From Deleted Inner Join t_zy on t_zy.njID = Deleted.njID
      
      

  3.   

    inserted、deleted是trigger使用的临时表:
    insert:inserted
    delete:deleted
    update:inserted & deleted
      

  4.   

    关于这个问题,我看到书上是这么写的:
    deleted表和inserted表是逻辑表,总是在内存中,并不在硬盘上存放。
    我是这样理解的,deleted表或inserted表在触发器执行时建立,在执行完毕后就会被释放掉,不知道对不对。
      

  5.   

    各位说得对,非常感谢大家。但我现在还有一个问题,就是我以上所说的各个表之间都建立了约束(CONSTRAINT ),这样的话,在执行以上TRIGGER时就会出错,必须在执行此嵌套TRIGGER时先删除约束,执行完后再加上约束。而棘手的问题则是不能TRIGGER里使用ALTER等语句,而在存储过程内又不能使用deleted表和inserted表。请问各位有没有遇到过类似的问题?该如何解决?
      

  6.   

    在TRIGGER中建立一个临时表存入deleted表或inserted表数据,然后执行存储过程。
    把 DELETE t_zy
       FROM #temp_db d INNER JOIN t_zy ON d.njID = t_zy.njID
    放到存储过程里执行。
    我自己没试过,不知道这样行不行。