关于AFTER和INSTEAD OF 触发器

DST_good 2005-03-08 07:32:17
表a上建了一个INSTEAD OF 和 AFTER的UPDATE触发器。

按我的想法对表a执行update 表a set 字段aa = 'aa'后先执行INSTEAD OF 触发器中的操作,操作执行完后,将表a中字段更新成'aa',AFTER触发器触发,执行AFTER触发器中的操作,AFTER触发器完成并将事务提交到数据库。
实际情况:
在sqlserver中先执行了INSTEAD OF 触发器,但AFTER触发器没有执行。

在有INSTEAD OF 和 AFTER的UPDATE触发器时候可以让AFTER 触发器先执行吗?
...全文
787 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2005-03-14
  • 打赏
  • 举报
回复
不能,否则就乱套了
yesyesyes 2005-03-09
  • 打赏
  • 举报
回复
select * into #inserted from inserted
exec('update 表a set 字段a = #inserted.字段a,字段c = #inserted.字段c from 表a,#inserted where 表a.字段b = #inserted.字段b')
DST_good 2005-03-09
  • 打赏
  • 举报
回复
因为要动态更新表a中的列必须用exec来执行,但是在instead of触发器中用
select * into #inserted from inserted
exec('update 表a set 字段a = #inserted.字段a,字段c = #inserted.字段c from #inserted where 表a.字段b = #inserted.字段b)
错误:
服务器: 消息 570,级别 16,状态 1,行 1
INSTEAD OF 触发器不支持直接递归。触发器执行失败。
而用AFTER触发器,由于表a中有image类型的列,在AFTER触发器中不支持select * into #inserted from inserted
提示:
错误311:不能在'inserted'表和'deleted'表中使用text、ntext、image列。
由于表a中字段太多,如果用select 字段a,字段b,...... into #inserted from inserted 的话太麻烦,而且不易维护。从syscolumns表中读出表a除image类型的列再用exec(select 字段a,字段b,...... into #inserted from inserted)执行,提示insterted对象无效,在exec中不能引用inserted表。
所以我想两种触发器一起用。
DST_good 2005-03-09
  • 打赏
  • 举报
回复
因为要动态更新表a中的列必须用exec来执行,但是在instead of触发器中用
select * into #inserted from inserted
exec('update 表a set 字段a = #inserted.字段a,字段c = #inserted.字段c from #inserted where 表a.字段b = #inserted.字段b)
错误:
服务器: 消息 570,级别 16,状态 1,行 1
INSTEAD OF 触发器不支持直接递归。触发器执行失败。
而用AFTER触发器,由于表a中有image类型的列,在AFTER触发器中不支持select * into #inserted from inserted
提示:
错误311:不能在'inserted'表和'deleted'表中使用text、ntext、image列。
到之处由于表a中字段太多,如果用select 字段a,字段b,...... into #inserted from inserted 的话太麻烦,而且不易维护。从syscolumns表中读出表a除image类型的列在用
exec(select 字段a,字段b,...... into #inserted from inserted)执行,提示insterted对象无效,在exec中不能引用inserted表。
所以我想两中触发器一起用。
yesyesyes 2005-03-09
  • 打赏
  • 举报
回复
既有instead of触发,又有after触发?
为什么不并为一个呢?
DST_good 2005-03-09
  • 打赏
  • 举报
回复
up
DST_good 2005-03-09
  • 打赏
  • 举报
回复
有人知道不?
DST_good 2005-03-08
  • 打赏
  • 举报
回复
这个我知道,instead of 只会执行触发器里的操作,相应的操作并不会执行。
现在我要问的是同时在一个表上定义了instead of 和after 触发器
在sqlserver中先执行了INSTEAD OF 触发器,但AFTER触发器没有执行。

在有INSTEAD OF 和 AFTER的UPDATE触发器时候可以让AFTER 触发器先执行吗?
631799 2005-03-08
  • 打赏
  • 举报
回复
For example if you are executing a DELETE statement against a table with an "INSTEAD OF" trigger defined on it, and the trigger's job is to mark a record status as logcially deleted, then the outcome is no record is actually deleted in the physical sense.
xluzhong 2005-03-08
  • 打赏
  • 举报
回复
我在豆豆技术网上看到如下论述:
“当为表或视图定义了针对某一操作(INSERT、 DELETE、 UPDATE) 的INSTEAD OF 类型触发器且执行了相应的操作时,尽管触发器被触发,但相应的操作并不被执行,而运行的仅是触发器SQL 语句本身。”

27,579

社区成员

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

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