请教一个由触发器所引起的问题!

hxd001_810 2007-01-17 10:23:10
我先是创建了如下的触发器:
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”,二者不是同一个字段,为何会出现只执行触发器的语句而不执行存储过程的语句?
请教一下各位高手!谢谢!
...全文
172 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiqiyuan 2007-01-17
  • 打赏
  • 举报
回复
第一个问题:后触发器是先执行触发器里面的SQL语句再判断激发触发器的,它是先执行里面的
Begin tran
update table2
set DeleteStatus=0
where table2_table1ID=(Select table1ID from inserted)
commit tran
再判断if update(DeleteStatus)是否要激发触发器
第二个问题:一般来说执行存储过程都可以服务器跟踪器里面看到的。
hxd001_810 2007-01-17
  • 打赏
  • 举报
回复
用instead of不是我的原意,不合适
这里应该使用后触发器的
Selina_621 2007-01-17
  • 打赏
  • 举报
回复
create Trigger UpdateTrigger On table1
instead of Update
Selina_621 2007-01-17
  • 打赏
  • 举报
回复
建立instead 触发器,试一试怎么样?
Selina_621 2007-01-17
  • 打赏
  • 举报
回复
如果用instead of 不用for 呢?
hxd001_810 2007-01-17
  • 打赏
  • 举报
回复
marco08(天道酬勤) ( ) 信誉:100 Blog 2007-01-17 10:43:12 得分: 0


執行存儲過程後 table2表DeleteStatus字段有改變嗎?


不好意思啊!
“有变化”!就是table2表DeleteStatus字段改变成0了!
hxd001_810 2007-01-17
  • 打赏
  • 举报
回复
没有变化
marco08 2007-01-17
  • 打赏
  • 举报
回复
執行存儲過程後 table2表DeleteStatus字段有改變嗎?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧