有一张基于三张表的视图(员工表,科室表,职称表,两个表都是跟员工表一对多的关系),视图中分别提取了,(员工表.ID,员工表姓名,科室表.名称,职称表,名称)。
   在视图中分别写了一个insert触发器和delete触发器,用ADOQuery.delete删除某条记录的时,delete触发器没起作用,记录是删除了,但是把所有这条记录相关的科室,职称都给删除了,原以为是表关系问题,
   在SQL查询分析器里删除是正常的,把delete触发器删除了,照样可以ADOQuery.delete删除跟刚才的象像一样,请问这是什么问题?

解决方案 »

  1.   

    说到底还是表关系的问题,你的主从表中,设置了级联删除
    ON DELETE CASCADE指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
      

  2.   

    级联引用操作按下列顺序激发 AFTER 触发器: 首先执行由原始 DELETE 或 UPDATE 直接导致的所有级联引用操作。
    当完成原始级联引用操作后,无论是否更新了任何行,都将激发原始表上的 AFTER 触发器。
    然后激发级联引用操作链中表上的 AFTER 触发器,但只有已更新或删除了表中的一行或多行时才激发。 
    如果任何原始级联引用操作集生成任何错误,则产生错误,不激发 AFTER 触发器,并且回滚 DELETE 或 UPDATE。AFTER 触发器可执行 DELETE 或 UPDATE 语句以启动其它级联引用操作链。每个辅助的引用操作链分开处理。这些辅助的引用操作链的行为与主链一样。在激发任何辅助触发器之前,完成所有的辅助引用操作。在每个独立的单元中,不定义执行级联引用操作和激发受影响的触发器的顺序。具有 INSTEAD OF 触发器的表不能同时具有指定级联操作的 REFERENCES 子句。但是,在作为级联操作目标的表上,AFTER 触发器可在其它表或视图上执行 INSERT、UPDATE 或 DELETE 语句,以激发在该表或视图上定义的 INSTEAD OF 触发器。
      

  3.   

    我试过了,(科室表,职称表)主表, (员工表)从表 如果是级联删除的话,删除科室表,职称表的任意一条记录,都会把员工表中匹配(科室或职称)的记录删除,视图在没有delete触发状况下,也能操作这是为什么了?
      

  4.   

    视图中不要删除和增加,如果非要这样做,又想控制细节,要用INSTEAD OF 触发器
      

  5.   

    用的就是INSTEAD OF delete触发器。
      

  6.   

    要是三层里解决起来办法多些。
    在两层中队了触发器,你可以这样试一下
    设置数据集字段的ProviderFlags属性
    把不想编辑表的字段pfInUpdate等去掉