一:触发器的优点
1.触发器是自动的。当对表中的数据做了任何修改之后立即被激活。
2.触发器可以通过数据库中的相关表进行层叠修改。
3.触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。
二:触发器的作用
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。触发器的主要作用主要有以下接个方面:
1. 强制数据库间的引用完整性
2. 级联修改数据库中所有相关的表,自动触发其它与之相关的操作
3. 跟踪变化,撤销或回滚违法操作,防止非法修改数据
4. 返回自定义的错误消息,约束无法返回信息,而触发器可以
5. 触发器可以调用更多的存储过程

三:触发器的分类
SqlServer包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。
1.DML(数据操作语言,Data Manipulation Language)触发器
DML触发器是一些附加在特定表或视图上的操作代码,当数据库服务器中发生数据操作语言事件时执行这些操作。SqlServer中的DML触发器有三种:
1. insert触发器:向表中插入数据时被触发;
2. delete触发器:从表中删除数据时被触发;
3. update触发器:修改表中数据时被触发。
当遇到下列情形时,应考虑使用DML触发器:
1. 通过数据库中的相关表实现级联更改
2. 防止恶意或者错误的insert、update和delete操作,并强制执行check约束定义的限制更为复杂的其他限制。
3. 评估数据修改前后表的状态,并根据该差异才去措施。
2.DDL(数据定义语言,Data Definition Language)触发器
DDL触发器是当服务器或者数据库中发生数据定义语言(主要是以create,drop,alter开头的语句)事件时被激活使用,使用DDL触发器可以防止对数据架构进行的某些更改或记录数据中的更改或事件操作。
3.登录触发器
登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。

create trigger trig_insert
on student
after insert
as
beginif object_id(N'student_sum',N'U') is null--判断student_sum表是否存在create table student_sum(stuCount int default(0));--创建存储学生人数的student_sum表declare @stuNumber int;select @stuNumber = count(*)from student;if not exists (select * from student_sum)--判断表中是否有记录insert into student_sum values(0);update student_sum set stuCount =@stuNumber; --把更新后总的学生数插入到student_sum表中
endcreate trigger insert_forbidden
on student_sum
after insert
as
beginRAISERROR('禁止直接向该表中插入记录,操作被禁止',1,1)--raiserror 是用于抛出一个错误
rollback transaction
end create trigger trig_delete
on student
after delete
as
beginselect stu_id as 已删除的学生编号,stu_name stu_gender,stu_agefrom deleted
end;

触发器种类


下面介绍一个较为奇葩的出发器运用示例:
需要如下图,需求要求以XS为首字母,时间日期YYYYMMDD为中间序号,结尾xxx为流水号,原程序中的流水号是按照前面的综合去判定的,也就是XS20190223相同时,同一天建立两张单据则设置后面流水为001和002,现要求流水号已年的形式排序,则之前的控件无法达到效果,下面用触发器尝试后发现可以

ALTER trigger [dbo].[cghtspbh]
on [dbo].[采购合同审批表]
after insert
as
begindeclare @number char(3);declare @String char(17);declare @String2 char(20);select @number=(select case when count(*)<10 then '00'+convert(varchar(30),count(*))
when count(*)>10 and count(*)<100 then '0'+convert(varchar(30),count(*))
when count(*)>100 then convert(varchar(30),count(*))
end as 数量 from 采购合同审批表
where substring(合同编号,3,4)=YEAR(getdate()));
select @String=substring(合同编号,0,11) from inserted;
select @String2=合同编号 from inserted;update 采购合同审批表 set 合同编号 = rtrim(ltrim(rtrim(ltrim(@String))+rtrim(ltrim(@number)))) where 合同编号=@String2
end

通过拆分原程序自动生成的流水号(不考虑后3位的形式)在通过查询当前表格中以2019年份开头的数据(与当前时间对比获取年份)的个数,凭借生成流水号,在自动接上之前生成的固定格式+时间作为新的完整流水号

sqlserver触发器Tigger使用及示例相关推荐

  1. sqlserver 触发器实例代码

    何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , D ...

  2. 一次SQLSERVER触发器编写感悟

    一次SQLSERVER触发器编写感悟 背景:BOSS须要我写一个工厂採集端到服务器端的数据同步触发器,数据库採用的是sqlserver2008 需求:将多台採集机的数据同步到server中,假设採集端 ...

  3. sqlserver 触发器 怎么获取更新前的值

     sqlserver 触发器 怎么获取更新前的值 更新的动作你可以分2步理解,先delete ,再insert 所以,前的值在 deleted里   后的值在 inserted里 create t ...

  4. Sqlserver 触发器

    Sqlserver 触发器 触发器是在对数据表 新增 修改 和删除的时候 进行一次自定义事件的处理 就是 比如 为新增一条数据 的时候 自动触发一个事件 来验证这个数据在别的表的关系  不然还得在应用 ...

  5. SqlServer触发器计算年休假天数

    SqlServer触发器计算年休假天数 表结构 触发器代码 根据插入语句中的进入本单位工作时间字段,自动计算年休假天数 数据库:sqlsever2012 表结构 触发器代码 SET ANSI_NULL ...

  6. sqlserver触发器的使用以及inserted和deleted详解

    背景:最近在项目中有需求是当人员表中有变动时(比如:增加人员.修改人员信息.删除人员信息)需要把这张表中的变动的信息同步到它对应的日志表中.那么如果用代码写逻辑的话在执行效率上会比较慢,正好sqlse ...

  7. sql触发器Tigger

    // Tigger 1.概念 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启 ...

  8. SQLServer触发器的创建和使用

    触发器也是和之前写的数据库函数和存储过程类似, 可以看做是一种特殊的数据库函数,只不过由系统调用,我们也需要表明调用的实际和规则 触发器的主体(也可以说是触发器的使用范围) 表table 视图view ...

  9. sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器

    各位新朋友-记得先点蓝字关注我哦- 11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位 ...

最新文章

  1. 【Python】序列解包 and * 和 ** 的区别
  2. 51单片机计算机实物焊接,基于51单片机的最小系统焊接图 浅谈单片机最小系统...
  3. ubuntu中用wine安装office2007
  4. jMeter parallel controller 无法使用 CSV Data config 提供的变量?
  5. 含有运算放大器的电阻电路
  6. [JAVA-坑]CGLib动态代理引起的空指针异常
  7. Golang系列(三)之并发编程
  8. 181011词霸扇贝有道每日一句
  9. 避开ie缓存机制,实时从服务器取得最新数据
  10. C语言程序设计谭浩强版 六
  11. 【个人笔记一】ART系统类的编译解析加载探究
  12. 使用电脑远程操作Jetson nano桌面1--操作流程
  13. GOOGLE HACKS巧妙使用网络搜索的技巧和工具(第二版)已经出版
  14. vue 拍照和上传图片
  15. 人工智能导论(2)——启发式算法(八数码问题)
  16. 拼多多API接口,item_search - 按关键字搜索商品
  17. 2007年开关稳压电源设计报告!!!
  18. 1451_TC275 DataSheet阅读笔记12_时钟、温度以及供电
  19. iphone测试oled的软件,干货 |西努妙解 iPhoneX OLED全面屏的检测方法
  20. 【机器学习】Scikit-Learn数据预处理文档翻译+笔记记录 - 1

热门文章

  1. 移植quectel的GPS模块
  2. 计算机组成原理-唐朔飞 学习指导与习题解答 第2版
  3. python:声明和定义
  4. 钉钉自动打卡并微信通知打卡成功
  5. MSRA相关资料总结!
  6. PCA针对TE过程(田纳西伊斯曼过程)数据的故障监测处理
  7. Nginx 搭建DASH服务器
  8. 得到经纬度数据使用Plotly画世界地图(美赛心得)
  9. 软件开发中产品与项目区别
  10. 致谢词大全字C语言,致谢词范文