日期:2014-05-18  浏览次数:20464 次

郁闷~~ 希望醒来的时候有人可以为我解答....一个未解决的触发器问题(80分)
表A   (id主键)         表B(id外键)

当更新表A的id时表B里的id也要变化..
下面是我从N多人看的:但是只能更新一个表:
CREATE   trigger   trigger_subupdate2   on   表A
instead   of   UPDATE
as
if   update(id)
begin  
  update   表B   set   id   =B.id   from   表B   A   ,inserted   B,Deleted   C     where   A.id=C.id
end
不过只能更新表B里的id但是表A里面的id却没有变化,这是怎么回事....晕??
我刚学触发器啥都不懂.还请各位大虾指点下有关于update触发器的主外键处理...谢谢了.小弟感激不尽..

------解决方案--------------------
--try
CREATE trigger trigger_subupdate2 on 表A
for UPDATE
as
if update(id)
begin
update 表B set id =B.id from 表B A ,inserted B,Deleted C where A.id=C.id
end
------解决方案--------------------
CREATE trigger trigger_subupdate2 on 表A
for UPDATE
as
if update(id)
begin
update 表B set id =B.id from 表B A ,inserted B,Deleted C where A.id=C.id
end
------解决方案--------------------
触发器分二类,一类是after触发器,一类是instead of触发器.
无论哪种触发器,被触发时SQLSERVER系统都会自动生成二个特有的虚拟表,修改前的行(旧值)被保存在触发器特有的deleted虚拟表中,修改后的行(新值)被保存在触发器特有的inserted虚拟表中.
after触发器的特点是基表中的数据已经被修改,而instead of触发器则不修改基表中的任何数据,具体怎么修改完全由用户在instead of触发器中决定,所以如果在instead of中没有写对基表更新的代码则基表不会被修改.

楼主使用的是instead of触发器,而触发器中只更新了B表,却没有更新A表(基表).