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

:暂无数据 2026-07-13 14:50:01 :0

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

大家好,今天小编来为大家解答以下的问题,关于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’ 则是指定的用户。

关于MSSQL中触发器的问题

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

sql server 触发器 中 for 怎么使用

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

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

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

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

FOR | AFTER
AFTER 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。
如果仅指定 FOR 关键字,则 AFTER 为默认值。
不能对视图定义 AFTER 触发器。
INSTEAD OF
指定执行 DML 触发器而不是触发 SQL 语句,因此,其优先级高于触发语句的操作。
如果仅指定 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_cons
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_cons"冲突。该冲突发生于数据库"TestDev",表"dbo.test_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_cons"冲突。该冲突发生于数据库"TestDev",表"dbo.test_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 触发器而不是触发 SQL 语句
也就是说 当你的触发器是 INSTEAD OF INSERT 的时候
你的 INSERT 语句,将直接执行这个触发器
而不是等你 INSERT 语句执行完了,数据写到表里面了以后,才触发。

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(表1.ID,表1.NAME,表2.DATE)
为 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 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。

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

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

INSTEAD OF

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

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

以上就是我们为大家找到的有关“sql触发器for和after的区别(sql语句的触发器问题,instead of、after、for事件的区别,还有execute as字句的使用谢谢)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

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

本文编辑:admin

更多文章:


withdrawal(withdrawal是什么意思)

withdrawal(withdrawal是什么意思)

今天给各位分享withdrawal是什么意思的知识,其中也会对withdrawal是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 07:00

根据流程图怎么编写程序(用c语言根据流程图写程序)

根据流程图怎么编写程序(用c语言根据流程图写程序)

大家好,今天小编来为大家解答以下的问题,关于根据流程图怎么编写程序,用c语言根据流程图写程序这个很多人还不知道,现在让我们一起来看看吧!

2026年10月11日 06:00

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

大家好,关于在from子句中可以出现很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何在from 子句中嵌套查询下面的语句在access中出错!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年10月11日 05:20

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

其实countif函数统计个数怎么用的问题并不复杂,但是又很多的朋友都不太了解countif函数怎么用 详解Excel中countif函数的使用方法,因此呢,今天小编就来为大家分享countif函数统计个数怎么用的一些知识,希望可以帮助到大

2026年10月11日 03:30

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

本篇文章给大家谈谈正则匹配数字之前的字符,以及正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问

2026年10月11日 03:00

register语言学(register语言学)

register语言学(register语言学)

“register语言学”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看register语言学(register语言学)!

2026年10月11日 01:40

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

“系统架构设计师可以直接考吗”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)!

2026年10月11日 01:00

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

大家好,如果您还对orlnsertbootmediinselected不太了解,没有关系,今天就由本站为大家分享orlnsertbootmediinselected的知识,包括我电脑开机显示这个是什么意思or insert boot med

2026年10月10日 23:00

display的用法(display是什么意思 详解display的含义和用法)

display的用法(display是什么意思 详解display的含义和用法)

大家好,如果您还对display的用法不太了解,没有关系,今天就由本站为大家分享display的用法的知识,包括display是什么意思 详解display的含义和用法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 22:00

html全部居中代码(怎么让网页居中显示,html如何让网页居中)

html全部居中代码(怎么让网页居中显示,html如何让网页居中)

大家好,今天小编来为大家解答以下的问题,关于html全部居中代码,怎么让网页居中显示,html如何让网页居中这个很多人还不知道,现在让我们一起来看看吧!

2026年10月10日 21:10

最近更新

withdrawal(withdrawal是什么意思)
2026-10-11 07:00:01 浏览:0
热门文章

标签列表