sql触发器for和after的区别(sql语句的触发器问题,instead of、after、for事件的区别,还有execute as字句的使用谢谢)

:暂无数据 2026-05-02 06:20:03 0
各位老铁们好,相信很多人对sql触发器for和after的区别都不是特别的了解,因此呢,今天就来为大家分享下关于sql触发器for和after的区别以及sql语句的触发器问题,instead of、after、for事件的区别,还有execute as字句的使用谢谢的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

sql语句的触发器问题,instead of、after、for事件的区别,还有execute as字句的使用谢谢

after等价于for,是事后触发。instead of则会取代原来的操作,例如在你的例子里,将不再执行插入操作,而是执行触发器里的操作。

execute as是用来定义模块的执行上下文
EXECUTE AS { CALLER | SELF | OWNER | ’user_name’ }
其中CALLER指模块调用方,SELF指创建或更改模块的用户,OWNER指模块的当前所有者, ‘user_name’ 则是指定的用户。

for|after|instead of分别在什么情况下用啊

FOR / AFTER 是一个:

完整写FOR AFTER,只不过 AFTER 可写可不写,一般省略掉了。

在用户执行数据操作之后,触发器触发,执行触发器代码。

不可以定义在视图上。

例如:

表1 (ID,NAME) 
表2 (ID,NAME)
当用户插入表1数据后,表2也**入相同的数据 
CREATE TRIGGER TRI1
ON 表1
FOR INSERT
AS
INSERT INTO 表2 SELECT * FROM INSERTED

INSTEAD OF:在用户执行数据操作数据之前,触发器触发,执行触发器代码,不执行用户的操作

根据这个特性,INSTEAD OF 触发器可以为视图添加数据操作的功能。

例如:

表1 (ID,NAME)
表2 (ID,DATE)
视图: VIEW_ALL(表****,表*****,表*****)
为 VIEW_ALL 视图添加INSERT操作
CREATE TRIGGER TRI2
ON VIEW_ALL
INSTEAD OF INSERT 
AS
BEGIN
INSERT INTO 表1 SELECT ID,NAME FROM INSERTED
INSERT INTO 表2 SELECT ID,DATE FROM INSERTED
END

更多详细资料可以看:

***隐藏网址***

FOR | AFTER

AFTER 指定触发器仅在触发 **L 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。

如果仅指定 FOR 关键字,则 AFTER 为默认值。

不能对视图定义 AFTER 触发器。

INSTEAD OF

指定执行 DML 触发器而不是触发 **L 语句,因此,其优先级高于触发语句的操作。不能为 DDL 或登录触发器指定 INSTEAD OF。

对于表或视图,每个 INSERT、UPDATE 或 DELETE 语句最多可定义一个 INSTEAD OF 触发器。但是,可以为具有自己的 INSTEAD OF 触发器的多个视图定义视图。

我想问下**L 2005中的触发器的for,instead of,after3种触发器的区别~

FOR | AFTER
AFTER 指定触发器仅在触发 **L 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。
如果仅指定 FOR 关键字,则 AFTER 为默认值。
不能对视图定义 AFTER 触发器。
INSTEAD OF
指定执行 DML 触发器而不是触发 **L 语句,因此,其优先级高于触发语句的操作。
如果仅指定 FOR 关键字,则 AFTER 为默认值。
也就是说, FOR = AFTER。
下面是一个触发器的例子:
-- 创建测试主表.
CREATE TABLE test_main (
id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
-- 创建测试子表.
CREATE TABLE test_sub (
id INT,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
-- 创建外键.
ALTER TABLE test_sub
ADD CONSTRAINT main_id_c***
FOREIGN KEY (main_id) REFERENCES test_main;
-- 创建 FOR 触发器.
CREATE TRIGGER InsertTest
ON test_sub
FOR INSERT
AS
BEGIN
PRINT(’INSERT test_sub!’);
END;
Go
INSERT INTO test_sub VALUES( 100,100,’100’);
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束"main_id_c***"冲突。该冲突发生于数据库"TestDev",表"*****_main", column ’id’。
语句已终止。
从上面的结果可以看到,由于外键冲突,插入失败,导致触发器也没有被执行。
-- 修改为 AFTER 触发器.
ALTER TRIGGER InsertTest
ON test_sub
AFTER INSERT
......
INSERT INTO test_sub VALUES( 100,100,’100’);
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束"main_id_c***"冲突。该冲突发生于数据库"TestDev",表"*****_main", column ’id’。
语句已终止。
可以看到,AFTER 运行结果与 FOR 一样。
-- 修改为 INSTEAD OF 触发器.
ALTER TRIGGER InsertTest
ON test_sub
INSTEAD OF INSERT
......
INSERT INTO test_sub VALUES( 100,100,’100’);
INSERT test_sub!
(1 行受影响)
从上面的结果看到,触发器被执行了。
但是 test_sub 中并没有 100,100,’100’ 的数据。
原因在于:
INSTEAD OF 指定执行 DML 触发器而不是触发 **L 语句
也就是说 当你的触发器是 INSTEAD OF INSERT 的时候
你的 INSERT 语句,将直接执行这个触发器
而不是等你 INSERT 语句执行完了,数据写到表里面了以后,才触发。

sql语句中,触发器中for 和 after 的区别是什么

两个没区别都是在update,insert ,delete 之后触发操作!
inserted of 属于前触发性,在update,insert ,delete 之前操作

sql server 触发器 中 for 怎么使用

创建触发器的语法是:
create trigger 触发器名称 on(为哪个表创建触发器) for (创建什么样的触发器)
只要记住,for后面跟触发器的类型就行了。
触发器主要分2种,DML和*****和instead of 都是DML触发器,其中,after主要是对表进行增、删、改时触发,而instead of 触发器并不执行其所定义的操作,只执行触发器本身。

关于MS**L中触发器的问题

你理解都错了, FOR与 AFTER 属于后触发器 也就是执行完成后在执行触发器,
DBMS会把你之前对表的操作与触发器执行的语句看成一个事务来执行,你建的触发器是个回滚的操作,当然会恢复你delete 的操作
---------------
当然有前触发器 ,instead of 的 就 属于 前触发器,具体怎么定义的建议你去找找相关资料,我这里一下也说不清楚!

希望本文不仅提供了关于sql触发器for和after的区别sql语句的触发器问题,instead of、after、for事件的区别,还有execute as字句的使用谢谢的答案,更提供了你寻找其他答案的方法。
本文编辑:admin

更多文章:


qq在线客服怎么联系(腾讯客服的在线客服怎么联系)

qq在线客服怎么联系(腾讯客服的在线客服怎么联系)

回顾我学习qq在线客服怎么联系的经历,腾讯客服的在线客服怎么联系可算是一个重要的转折点。正是搞懂了它,一切才变得顺畅起来。

2026年5月2日 19:40

数据结构与算法代码(C语言编写数据结构查找算法)

数据结构与算法代码(C语言编写数据结构查找算法)

“数据结构与算法代码”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看数据结构与算法代码(C语言编写数据结构查找算法)!

2026年5月2日 19:20

include形容词(included用法)

include形容词(included用法)

朋友们,对include形容词感到陌生再正常不过了。本篇内容将化身您的指南针,帮您在included用法的迷雾中找到方向。

2026年5月2日 19:00

firefox清除缓存(请教问题:火狐浏览器清空缓存的快捷键是什么)

firefox清除缓存(请教问题:火狐浏览器清空缓存的快捷键是什么)

当我们讨论firefox清除缓存时,我们真正需要关注的是什么?很多高手的答案都指向了:请教问题:火狐浏览器清空缓存的快捷键是什么。为什么?

2026年5月2日 18:40

菜单栏命令在哪(写出在菜单栏中怎样找到序列图层命令同)

菜单栏命令在哪(写出在菜单栏中怎样找到序列图层命令同)

关注本号的朋友都知道,我们一直在持续输出关于菜单栏命令在哪的干货。今天,我们就聚焦到大家反复问到的写出在菜单栏中怎样找到序列图层命令同上。

2026年5月2日 18:20

matlab解符号方程组的例子(matlab 求助 解方程组)

matlab解符号方程组的例子(matlab 求助 解方程组)

各位老铁们好,相信很多人对matlab解符号方程组的例子都不是特别的了解,因此呢,今天就来为大家分享下关于matlab解符号方程组的例子以及matlab 求助 解方程组的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年5月2日 18:00

安卓和前端的区别?自学编程学习前端还是后端呢

安卓和前端的区别?自学编程学习前端还是后端呢

我们注意到,那些在前端吧上表现突出的人,往往都对安卓和前端的区别有独到的见解。这并非巧合。

2026年5月2日 17:40

编程猫被曝一边招人一边裁员(编程猫为什么被禁)

编程猫被曝一边招人一边裁员(编程猫为什么被禁)

这篇文章给大家聊聊关于编程猫被曝一边招人一边裁员,以及编程猫为什么被禁对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年5月2日 17:20

网络编程实用教程答案(吉林大学网络学院本学期(Java网络编程大作业)有知道答案的吗)

网络编程实用教程答案(吉林大学网络学院本学期(Java网络编程大作业)有知道答案的吗)

您是否曾想过,网络编程实用教程答案究竟是怎么一回事?它与吉林大学网络学院本学期(Java网络编程大作业)有知道答案的吗之间又有什么联系?本文将为您一探究竟。

2026年5月2日 17:00

wampserver橙色如何变成绿色(wampserver 64 为什么总显示橙色)

wampserver橙色如何变成绿色(wampserver 64 为什么总显示橙色)

面对wampserver橙色如何变成绿色这个议题,很多人在wampserver 64 为什么总显示橙色这里栽了跟头。今天,我们就来聊聊如何避免这个坑,轻松上手。

2026年5月2日 16:40

最近更新

include形容词(included用法)
2026-05-02 19:00:02 浏览:0
wampserver橙色如何变成绿色(wampserver 64 为什么总显示橙色)
2026-05-02 16:40:01 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
mysql insert into字段顺序问题(mysql insert into的问题)
2026-04-13 16:00:02 浏览:1
标签列表