一:触发器的优点
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. 镜头评价指标及测试方法(三)--------测量原理及3D相机调查
  2. VB100年底测试:McAfee金山遗憾出局 瑞星表现令人意外
  3. linux中/bin和/sbin和/usr/bin和/usr/sbin
  4. Bootstrap 学习笔记4 巨幕页头略缩图警告框
  5. Hadoop的启动和停止说明
  6. 深入了解VB中的变量和指针
  7. TypeError: TF_SessionRun_wrapper: expected all values in input dict to be ndarray
  8. 全国企业税收调查数据(2007-2016)共10年数据,均未脱敏。可通过纳税人识别号,识别具体企业名称和地区信息等,可匹配中国工业企业数据库,中国出口海关统计数据、中国企业污染排放数据库、中国海关数据
  9. CSDN出品,必是精品:CSDN浏览器助手!
  10. 运行MINGW时遇到缺少.dll
  11. Google Earth Engine(GEE)——美国俄勒冈大学制作的可视化土地分类下载器
  12. 智能家居系列之智能家居平台设计
  13. 如何查看笔记本电脑的型号?
  14. 搞懂它,带你学会高效配置交换机!
  15. 展望下未来的计算机400字,展望未来的作文400字
  16. 产品硬件成本分析_硬件项目中的错误成本
  17. 选择java还是python-还在纠结选Python还是Java?看完就有数了
  18. Windows 标准控件 ComboBox 的改造
  19. windows和ubuntu双系统安装笔记
  20. UVA-10213 How many pieces of land

热门文章

  1. 05_CAP与BASE原理
  2. 适配Android Q上读取多媒体文件
  3. c51单片机光电门测反应时间(实战小项目)
  4. 秀动脚本增加微信通知和多账号抢购
  5. css hover变成手_css鼠标样式cursor介绍(鼠标手型)
  6. 如何在鼠标右键加入自定义电源计划(如关闭睿频降温) For Win10
  7. 数字图像处理(DIP)实验4 目标颜色识别
  8. 程序员关爱-坐姿检测-设计思路及使用与下载
  9. Java 根据时间戳计算星座
  10. 2017 年节点——T 型成长,持续学习