/*
触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。
而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。
当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。
  |------------------|----------------------|----------------------|
  |对表的操作        |    Inserted逻辑表    |   Deleted逻辑表      |
  |------------------|----------------------|----------------------|
  |增加记录(insert)|    存放增加的记录    |   无                 |
  |------------------|----------------------|----------------------|
  |删除记录(delete)|    无                |   存放被删除的记录   |
  |------------------|----------------------|----------------------|
  |修改记录(update)|    存放更新后的记录  |   存放更新前的记录   |
  |------------------|----------------------|----------------------|

触发器分类:
1、DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在数据库中发生 DML 事件时将启用。DML事件是指在表或视图中对数据进行的 insert、update、delete 操作的语句。
2、DDL(数据定义语言 Data Definition Language)触发器:是指当服务器或数据库中发生 DDL 事件时将启用。DDL事件是指在表或索引中的 create、alter、drop 操作语句。
3、登陆触发器:是指当用户登录 SQL SERVER 实例建立会话时触发。如果身份验证失败,登录触发器不会触发。

其中 DML 触发器比较常用,根据 DML 触发器触发的方式不同又分为以下两种情况:
after 触发器(之后触发):其中 after 触发器要求只有执行 insert、update、delete 某一操作之后触发器才会被触发,且只能定义在表上。
触发方式:for |after触发器(之后触发)、 instead of 触发器 (之前触发)、 触发器的类型(delete,insert,update)

*/

--trigger on an insert, update, or delete statement to a table or view (DML trigger)
create trigger [ schema_name . ]trigger_name 
on { table | view } 
[ with <dml_trigger_option> [ ,...n ] ]
{ for | after | instead of } { [ insert ] [ , ] [ update ] [ , ] [ delete ] } 
as { sql_statement  [ ; ] [ ,...n ] | external name <method specifier [ ; ] > }

--trigger on a create, alter, drop, grant, deny, revoke, or update statistics statement (DDL trigger)
create trigger trigger_name 
on { all server | database } 
[ with <ddl_trigger_option> [ ,...n ] ]
{ for | after } { event_type | event_group } [ ,...n ]
as { sql_statement  [ ; ] [ ,...n ] | external name < method specifier >  [ ; ] }

<ddl_trigger_option> ::=
    [ encryption ]
    [ execute as clause ]

<method_specifier> ::=
    assembly_name.class_name.method_name

trigger on a logon event (logon trigger)
create trigger trigger_name 
on all server 
[ with <logon_trigger_option> [ ,...n ] ]
{ for | after } logon  
as { sql_statement  [ ; ] [ ,...n ] | external name < method specifier >  [ ; ] }
<logon_trigger_option> ::=
    [ encryption ]
    [ execute as clause ]

<method_specifier> ::=
    assembly_name.class_name.method_name

--创建触发器
create trigger people_tr
on people
for  insert
as 
 ...
go

--修改触发器
alter trigger people_tr
on people
for insert
as 
 ...
go

--重命名people表
 exec sp_rename 'people_tr','people_tr'--旧名,新名
--删除触发器
 drop trigger people_tr

--利用sp_settriggerorder设置触发器执行顺序
exec sp_settriggerorder 
[ @triggername = ] '[ triggerschema. ] triggername',--要设置或更改其顺序的触发器的名称及其所属的架构。
[ @order = ] 'value',--First--触发器被第一个触发。Last--触发器被最后一个触发。None--触发器以未定义的顺序触发。 
[ @stmttype = ] 'statement_type'[ , [ @namespace = ] { 'DATABASE' | 'SERVER' | NULL } ]--指定触发器的类型,可以是INSERT、UPDATE、DELETE、LOGON 或用于激发DDL触发器的DDL事件中列出的任何 Transact-SQL 语句事件。
[ @namespace = { 'DATABASE' | 'SERVER' | NULL }]--默认值NULL,如果 triggername 是 DDL 或登录触发器,则指定所创建的 triggername 是具有数据库范围还是服务器范围。

--查看数据库中所有的触发器
select * from sysobjects where xtype='TR'
--触发器状态is_disabled字段0为启用,1为禁用
select * from sys.triggers
--sp_helptrigger 用于查看触发器的属性 : 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。
exec sp_helptrigger people, 'insert,update,delete'
--查看触发器内容
exec sp_helptext 'people_tr'
--禁用触发器
disable trigger people_tr on people;
--启用触发器
enable trigger people_tr on people;

SQLServer触发器相关推荐

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

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

  2. sqlserver 触发器实例代码

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

  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. sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器

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

  8. SqlServer 触发器 详细讲解

    什么是触发器 触发器是一个在修改指定表值的数据时执行的存储过程,不同的是执行存储过程要使用EXEC语句来调用,而触发器执行不需要使用EXEC语句来调用,通过创建触发器可以保证不同表的逻辑相关数据的引用 ...

  9. sqlserver触发器Tigger使用及示例

    一:触发器的优点 1.触发器是自动的.当对表中的数据做了任何修改之后立即被激活. 2.触发器可以通过数据库中的相关表进行层叠修改. 3.触发器可以强制限制.这些限制比用CHECK约束所定义的更复杂.与 ...

  10. sqlserver 触发器 mysql_Sqlserver与Mysql触发器有什么差别呢?

    下面显示的是触发器用到的两个表 --创建sc表CREATETABLE[sc]([ScId]intNOTNULL,[SNo]intNOTNULL,[CNo]intNOTNULL,[Score]intDE ...

最新文章

  1. CTFshow 信息收集 web3
  2. java remote desktop_Remote Desktop
  3. java: cannot execute binary file错误
  4. 深入理解lua的协程coroutine
  5. P4198 楼房重建 线段树 + 区间合并
  6. 如何画圆柱_什么是最速降线?如何来验证一下呢?这里用SolidWorks来试一试
  7. 变了,iPhone 12变身iPhone 4模样;下一代只支持单种5G频段?
  8. is present but cannot be translated into a null value due to being declared as a primitive type
  9. 均值(Mean)和均值标准误差(S.E. Mean)
  10. Python代码刷博客访问量
  11. javascript 常用代码大全(4)
  12. 00110_Class类
  13. WebService学习总结(6)——WebService常用接口
  14. 蓝光护目镜 v6.66.6.3
  15. 网站建设流程都有哪些?
  16. 《三体》与《西部世界》
  17. 计算机表格公开课,Word表格制作教案公开课
  18. 105道Java面试题
  19. [创业-23]:财务报表 - 损益表(利润表)
  20. ffmpeg js转换音频_webRTC使用ffmpeg.js将webm转换为mp4

热门文章

  1. 3dmax中怎么修改帧数
  2. 有什么软件测试显卡坏不坏,如何判断显卡故障 显卡坏了有哪些症状【详解】...
  3. 5g鸿蒙概念,OPPO 5G概念机曝光!骁龙855+5000mAh+鸿蒙系统,续航太强悍
  4. 人际关系-《关键冲突》书中的精髓:如何掌握化解人际关系危机的技巧,让我们的人际关系更和谐。
  5. established 太多_最近tcp连接数ESTABLISHED一直比较高 显示ip都是cdn的,cpu占用比较高怎么办...
  6. oracle创建用户并授权
  7. 一个门店省市店名三级联动
  8. linux memcached 缓存失效,高并发访问下避免对象缓存失效引发Dogpile效应
  9. SQL 语句 (数据查询语言)
  10. 小程序排名第一后怎么精细运营?