有一张基于三张表的视图(员工表,科室表,职称表,两个表都是跟员工表一对多的关系),视图中分别提取了,(员工表.ID,员工表姓名,科室表.名称,职称表,名称)。
在视图中分别写了一个insert触发器和delete触发器,用ADOQuery.delete删除某条记录的时,delete触发器没起作用,记录是删除了,但是把所有这条记录相关的科室,职称都给删除了,原以为是表关系问题,
在SQL查询分析器里删除是正常的,把delete触发器删除了,照样可以ADOQuery.delete删除跟刚才的象像一样,请问这是什么问题?
在视图中分别写了一个insert触发器和delete触发器,用ADOQuery.delete删除某条记录的时,delete触发器没起作用,记录是删除了,但是把所有这条记录相关的科室,职称都给删除了,原以为是表关系问题,
在SQL查询分析器里删除是正常的,把delete触发器删除了,照样可以ADOQuery.delete删除跟刚才的象像一样,请问这是什么问题?
ON DELETE CASCADE指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
当完成原始级联引用操作后,无论是否更新了任何行,都将激发原始表上的 AFTER 触发器。
然后激发级联引用操作链中表上的 AFTER 触发器,但只有已更新或删除了表中的一行或多行时才激发。
如果任何原始级联引用操作集生成任何错误,则产生错误,不激发 AFTER 触发器,并且回滚 DELETE 或 UPDATE。AFTER 触发器可执行 DELETE 或 UPDATE 语句以启动其它级联引用操作链。每个辅助的引用操作链分开处理。这些辅助的引用操作链的行为与主链一样。在激发任何辅助触发器之前,完成所有的辅助引用操作。在每个独立的单元中,不定义执行级联引用操作和激发受影响的触发器的顺序。具有 INSTEAD OF 触发器的表不能同时具有指定级联操作的 REFERENCES 子句。但是,在作为级联操作目标的表上,AFTER 触发器可在其它表或视图上执行 INSERT、UPDATE 或 DELETE 语句,以激发在该表或视图上定义的 INSTEAD OF 触发器。
在两层中队了触发器,你可以这样试一下
设置数据集字段的ProviderFlags属性
把不想编辑表的字段pfInUpdate等去掉