博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server insert的触发器
阅读量:6240 次
发布时间:2019-06-22

本文共 1988 字,大约阅读时间需要 6 分钟。

SQL Server insert的触发器

一张表a根据一列(唯一键或主键)a1当插入数据时判断该列a1的开头的字符是否为:'0150'

若是则更新该表a的a2列为:'-10'

a表

CREATE TABLE a(

a1 nvarchar(50) NULL,
a2 int NULL
)

 

select * from a
truncate table a

 

该触发器一次只能插入一行

create trigger tri_insert_a

on a
after insert
as
begin
if (select a.a1 from a, inserted
where a.a1 = inserted.a1 and a.a1) like '0150%'
begin
update a set a2='-10'
from a, inserted
where a.a1 = inserted.a1
and a.a1 like '0150%'
end
end

 

drop trigger tri_insert_a

 

一次插入多行

create trigger tri_insert_a
on a
after insert
as
begin
if exists(select a.a1 from a, inserted
where a.a1 = inserted.a1 and a.a1 like '0150%')
begin
update a set a2='-10'
from a, inserted
where a.a1 = inserted.a1
and a.a1 like '0150%'
end
end

drop trigger tri_insert_a

select * from a

 

修改触发器

alter trigger tri_insert_a
on a
after insert
as
begin
if exists(select a.a1 from a, inserted
where a.a1 = inserted.a1 and a.a1
like '0150%')
begin
update a set a2='-10'
from a, inserted
where a.a1 = inserted.a1
and a.a1 like '0150%'
end
end

创建触发器语法
create trigger trigger_name
on {table_name|view_name}
{After|Instead of} {insert|update|delete}
as 相应T-SQL语句

其中关于触发器有时会遇到for替代after的情况,for 和 after 没有区别。

for 不是before,sqlserver只有instead和after两种触发器。默认是after的。
for 不是同步,也不是BEFORE,是触发器默认的触发点,默认为AFTER,能用就用AFTER,
因为for 的话要编译转换一下后变成after,
所以for 比after 效率低一点点吧

还有经常遇到 insert table_a select * from table_b 这样的语句,
同时在表table_a中根据每一条新增的SQL语句,通过触发器来触发对应的一系列的后续操作.
分析:
实际上insert触发器,在每次SQL语句中只会影响到第一条的语句
如果触发器被启用,触发器对每个批处理执行一次。
触发器是针对一个事务而言,而不是根据数据记录来做触发的。
inserted,deleted是可以当作是临时表,但不是一条记录的临时表,而是批处理的临时表(一个事务的临时表)

 

参考文档:

关于MSDN《了解 DML 触发器》

http://blog.csdn.net/jinjazz/article/details/3420299

SQL Server:触发器详解
http://www.cnblogs.com/rainman/p/3675834.html

SQL Server 触发器
http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html

【SQL Server】SQL触发器经验详解
http://jingyan.baidu.com/article/77b8dc7f2b82416175eab65b.html

可遇不可求的Question之SQLSERVER触发器不支持多行插入操作篇
http://www.cnblogs.com/tigerjacky/p/1987913.html

 

转载于:https://www.cnblogs.com/hw-1015/p/6605838.html

你可能感兴趣的文章
MySQL学习笔记_6_SQL语言的设计与编写(下)
查看>>
linux下挂载(mount)光盘镜像文件、移动硬盘
查看>>
线性链表的c语言实现
查看>>
关于dns服务工作的原理,和配置的细节理解。
查看>>
JavaScript Cookie
查看>>
MVC+Nhibernate+spring.net(三)
查看>>
【图的最短路径】迪杰斯特拉算法求图的最短路径
查看>>
计划人生与程序设计--面对变化
查看>>
JAVA 添加、修改和删除PDF书签
查看>>
How to describe the numerical values?
查看>>
CorelDRAW中如何复制对象属性详解
查看>>
深入理解javascript原型和闭包(9)——简述【执行上下文】下
查看>>
js 复制粘贴
查看>>
插入排序算法的C语言实现
查看>>
开学考试心得感想
查看>>
window下安装nodejs,npm,cnpm,bower 以及vue
查看>>
事件分发机制
查看>>
SQL Server性能优化(14)索引碎片
查看>>
ORA-01688表空间无法扩展
查看>>
Xcode c语言如何清空输入缓冲区
查看>>