请问【INSTEAD OF UPDATE】触发器对不感兴趣的列更新,如何让其通过

ahdung 2012-08-24 12:40:51
SQL 2008 R2

想在update A表中的列 col 前进行一些操作,如果是更新其它列,无所谓,放行。

所以我定义了一个INSTEAD OF UPDATE触发器。由于我只对col的更新感兴趣,所以触发器的开头我就判断IF UPDATE(col),代码片段如下:

IF UPDATE(col)
BEGIN
--DoSomething;
END

但这样一来,更新col列时的确会DoSomething,但更新其它列的话就什么都不干,列不会被更新,试过 IF NOT UPDATE(col) RETURN,但与之前的效果一样,一跳就彻底跳出,不再继续。请问有什么语句能实现跳出该触发器并继续?
注:不能用after触发器
...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-08-24
  • 打赏
  • 举报
回复
IF UPDATE(COL)
BEGIN
DO
END
ELSE
BEGIN
UPDATE T SET COL1=I.COL1,COL2=I.COL2.......... FROM TB T ,INSERTED I WHERE T.ID=I.ID
END
Aaron_Chan 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
SQL code


if update(col1) or update(col2) or ...
begin
do sth.
end
[/Quote]

自己按这种方式去组合你的条件,可以是or 。and 什么的。
  • 打赏
  • 举报
回复
如果你用instead of update的话,相当于你不用系统提供的更新,而用你自己的语句。
这样的话,如果你想更新其他列,那就要像你更新col一样,要给每个列都加上
if update(col2)
begin
update table set col2=i.col2
from table a
inner join inserted i
on a.id=b.id
end
Aaron_Chan 2012-08-24
  • 打赏
  • 举报
回复

if update(col1) or update(col2) or ...
begin
do sth.
end
ahdung 2012-08-24
  • 打赏
  • 举报
回复
看来想偷懒只有动态exec罢了,一串if update(xxx) or太不符合偷懒原则。NND就不能整个return/continue/skip之类的关键字跳出并继续么
Aaron_Chan 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
请问有没有办法在INSTEAD OF中获取到触发它的语句?
[/Quote]


触发器不是有inserted和deleted临时表吗?
ahdung 2012-08-24
  • 打赏
  • 举报
回复
请问有没有办法在INSTEAD OF中获取到触发它的语句?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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