请教一个由触发器所引起的问题!
我先是创建了如下的触发器:
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)是否要激发触发器
第二个问题:一般来说执行存储过程都可以服务器跟踪器里面看到的。