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

SQL Server insert的触发器相关推荐

  1. c# mysql 触发器 实时,C#-.Net SqlDataAdapter和SQL Server中的触发器

    我在SQL Server中使用触发器,该触发器在SQL Server Management Studio的查询窗口中执行查询时按要求工作.触发器的目的是从一个表中获取最新值(其中一个ID对应于插入的I ...

  2. SQL server与Oracle触发器的创建与使用

    SQL Server 1创建触发器 GO BEGIN IF (object_id('WMY', 'tr') is not null) DROP trigger WMY END; GO CREATE T ...

  3. 浅谈SQL Server 数据库的触发器

    浅谈SQL Server 数据库的触发器   触发器的特征: 1.触发器是在对表进行增.删.改时,自动执行的存储过程.触发器常用于强制业务规则,它是一种高级约束,通过事件进行触发而被执行. 2.触发器 ...

  4. sql 会话_在特定会话中禁用SQL Server中的触发器

    sql 会话 This article will focus on the various ways to disable triggers in SQL Server so they won't i ...

  5. Sql Server系列:触发器

    触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...

  6. 如何在SQL Server中使用触发器

    触发器是一种特殊的存储过程,在使用触发器之前可以与存储过程进行比较,触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用. 触发器主要优点如下: 触发器是自动的:当对表中 ...

  7. 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)

    如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面是一个例子,用来说明通过sql server中的DDL触发器,来记录create ta ...

  8. sql server中的触发器

    目录 1.触发器的定义 2  触发器的分类 3 :  dml触发器的工作原理 4 触发器的应用 1.insert触发器 2.delete触发器 3 update 触发器 DDL触发器 5.触发器的启用 ...

  9. Sql server Insert执行的秘密(下) 带外键的INSERT分析

    2019独角兽企业重金招聘Python工程师标准>>> 这一篇分析一下带外键表的INSERT的例子.   本文所用的数据表结构如上图所示:其中Blog表上BlogID是自增的主键,并 ...

  10. sql server insert values 多值 与oracle 的不同

    类似的语句在 oracle 中是不能执行的 insert into temp_tbl values('app'),('demo'); 但是在sql server 中是可以的 insert into c ...

最新文章

  1. maxcompute 2.0复杂数据类型之struct
  2. 力扣——所有可能的满二叉树
  3. 方立勋_30天掌握JavaWeb_Servlet
  4. SharePoint 2010 RBS 安装和配置遇到的一个问题
  5. fatal: protocol error: bad line length character: No s原因
  6. Gerrit配置--用户配置
  7. 均匀三次b样条曲线_西门子数控曲线加工进给速度优化指令
  8. C++难吗?好学吗?C++到底怎么样?
  9. IDL编程实现拟合树的圆心代码
  10. 测试页能打印 软件不能打,Windows7分享打印机能打测试页打印文件怎么没反应
  11. html+css+气泡,纯CSS气泡框实现方法探究
  12. 网络资源大搜索(转)
  13. 解决3Dmax材质编辑器重影问题
  14. 【CANdelaStudio编辑CDD】-0.1-如何对比两个CDD诊断描述文件
  15. Linux应用开发5 信号(软中断,处理异步请求,进程间通讯)
  16. 分享一个stm8s003单片机的ADC转换,附加一个冒泡算法(用于减少误差)
  17. 什么是面向对象?你是怎么理解面向对象的?为什么要用面向对象?用面向对象有什么好处?
  18. 怎样裁剪GIF动态图片?教你一键在线完成GIF裁剪
  19. 使用windows引导的ubuntu双操作系统
  20. 思科网络学院-网络互联-第五章

热门文章

  1. RHCE实验环境虚拟机下载及注意事项
  2. GENTLE.NET快速上手
  3. FRR BGP协议分析17 -- labeled-unicast
  4. Android下播放YUV视频文件
  5. linux下实现在程序运行时的函数替换(热补丁)
  6. 通过KGDB进行双机内核调试
  7. 解决在servlet中输出html的中文输出为问号的问题
  8. java异常处理中的返回值
  9. pycharm python脚本如何调试_Pycharm调试程序技巧小结
  10. asp.net gridview 为什么只显示一行数据_为什么中位数(大多数时候)比平均值好