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

请教一个由触发器所引起的问题!
我先是创建了如下的触发器:
create       Trigger   UpdateTrigger   On   table1
For   Update
As
if   update(DeleteStatus)
Begin   tran
                update   table2
                set   DeleteStatus=0
                where   table2_table1ID=(Select   table1ID   from   inserted)
commit   tran
而后,我创建了一个存储过程:
create   proc   p_Update
@t   datetime
as
update   table1
set   Date=@t
接下来的问题就是:当我执行这个存储过程的时候,我在服务器跟踪中发现,实际执行的是上面的触发器,而不是存储过程!令我感到很奇怪的是,明明我在触发器中用的是“if   update(DeleteStatus)”,而我在存储过程更新的是“set   Date=@t”,二者不是同一个字段,为何会出现只执行触发器的语句而不执行存储过程的语句?
请教一下各位高手!谢谢!

------解决方案--------------------
執行存儲過程後 table2表DeleteStatus字段有改變嗎?
------解决方案--------------------
如果用instead of 不用for 呢?
------解决方案--------------------
create Trigger UpdateTrigger On table1
instead of Update

------解决方案--------------------
第一个问题:后触发器是先执行触发器里面的SQL语句再判断激发触发器的,它是先执行里面的
Begin tran
update table2
set DeleteStatus=0
where table2_table1ID=(Select table1ID from inserted)
commit tran
再判断if update(DeleteStatus)是否要激发触发器
第二个问题:一般来说执行存储过程都可以服务器跟踪器里面看到的。