--触发器学习
-------------------------------------------------------------------------------after 触发器-------------------------------------------------------------------------------
--1 insert 触发器
IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_insert')
DROP TRIGGER tgr_tablename_insert
GO
CREATE TRIGGER tgr_tablename_insert
ON dbo.TB_HR_SatisfactionEvaluation_Quota
--插入数据触发
FOR INSERT
AS
--触发执行的操作
INSERT INTO dbo.TB_HR_SatisfactionEvaluation_Quota( EvaluationYear ,EvaluationType ,LocationName ,DescVal ,DeptName ,EvaluationDesc ,enable ,createby ,CreateTime ,updateby ,updateTime)
VALUES('2017','test01','test01',123,'test01','test01',1,1,GETDATE(),1,GETDATE())
GO

--2 delete 触发器
IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_delete')
DROP TRIGGER tgr_tablename_delete
GO
CREATE TRIGGER tgr_tablename_delete
ON dbo.TB_HR_SatisfactionEvaluation_Quota
FOR DELETE
AS
--触发执行执行的操作
--DELETE FROM dbo.TB_HR_SatisfactionEvaluation_Quota WHERE CreateTime='2017-07-31' AND LocationName='test01'
PRINT '备份数据中...'

IF(OBJECT_ID('BackupTest')IS NOT NULL)
BEGIN

INSERT INTO BackupTest
SELECT
EvaluationYear ,
EvaluationType ,
LocationName ,
DescVal ,
DeptName ,
EvaluationDesc ,
enable ,
createby ,
CreateTime ,
updateby ,
updateTime
FROM Deleted;
END
ELSE
BEGIN
SELECT * INTO BackupTest FROM Deleted
END

PRINT '数据备份成功!'
GO

--3 update触发器
IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_update')
DROP TRIGGER tgr_tablename_update
GO
CREATE TRIGGER tgr_tablename_update
ON dbo.TB_HR_SatisfactionEvaluation_Quota
FOR UPDATE
AS
--触发器要执行的操作 inserted表 deleted表

--inserted表中的数据
INSERT INTO dbo.BackupTest SELECT
Inserted.EvaluationYear ,
Inserted.EvaluationType ,
Inserted.LocationName ,
Inserted.DescVal ,
Inserted.DeptName ,
Inserted.EvaluationDesc ,
Inserted.enable ,
Inserted.createby ,
Inserted.CreateTime ,
Inserted.updateby ,
Inserted.updateTime FROM Inserted
--deleted表中的数据
INSERT INTO dbo.BackupTest SELECT
Deleted.EvaluationYear ,
Deleted.EvaluationType ,
Deleted.LocationName ,
Deleted.DescVal ,
Deleted.DeptName ,
Deleted.EvaluationDesc ,
Deleted.enable ,
Deleted.createby ,
Deleted.CreateTime ,
Deleted.updateby ,
Deleted.updateTime FROM Deleted
GO
-------------------------------------------------------------------------------after 触发器-------------------------------------------------------------------------------

-------------------------------------------------------------------------------instead of 触发器-------------------------------------------------------------------------------
/*
instead of 触发器 不执行相应的update delete insert 操作,执行的只是触发器本身的脚本
*/
IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_tablename_insteadOf')
DROP TRIGGER tgr_tablename_insteadOf
GO
CREATE TRIGGER tgr_tablename_insteadOf
ON dbo.TB_HR_SatisfactionEvaluation_Quota INSTEAD OF DELETE /*update insert*/
AS
DECLARE @LocationName NVARCHAR(50)=''
SELECT @LocationName=Deleted.LocationName FROM Deleted
PRINT 'LocationName是'+@LocationName
--暂时不删除数据的
DELETE FROM dbo.TB_HR_SatisfactionEvaluation_Quota WHERE LocationName='test01'
GO

-------------------------------------------------------------------------------instead of 触发器-------------------------------------------------------------------------------

--显示自定义消息 raiseError
IF EXISTS(SELECT * FROM sys.objects WHERE name='tgr_messager')
DROP TRIGGER tgr_messager
GO
CREATE TRIGGER tgr_messager
ON dbo.TB_HR_SatisfactionEvaluation_Quota
AFTER INSERT,DELETE
AS
RAISERROR('tgr_messager触发器被触发执行',16,10)
GO

---启用 禁用触发器
DISABLE TRIGGER tgr_messager ON dbo.TB_HR_SatisfactionEvaluation_Quota;
ENABLE TRIGGER tgr_messager ON dbo.TB_HR_SatisfactionEvaluation_Quota;

--查看已经存在的触发器
SELECT * FROM sys.triggers
SELECT * FROM sys.objects WHERE type='TR'

SQL_触发器学习的更多相关文章

  1. 触发器学习笔记(:new,:old用法)

    触发器学习笔记(:new,:old用法) 触发器是数据库发生某个操作时自动运行的一类的程序         用于保持数据的完整性或记录数据库操作信息方面         触发器不能够被直接调用,只能够 ...

  2. SQL触发器学习

      简介 触发器是一种特殊类型的存储过程.触发器分为: DML( 数据操纵语言 Data Manipulation Language)触发器:数据库中表或视图的数据更改时触发,包括insert,upd ...

  3. 一篇很棒的 MySQL 触发器学习教程

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...

  4. SQL server触发器学习记录

    作为C#程序员,我工作内容基本就是winform,wpf,asp.net.sql接触的比较少,今天突然来了一个ticket要我修改触发器脚本....只会select*的我顿感迷茫... 需求描述:as ...

  5. SQLServer存储过程和触发器学习记录及简单例子

     一.存储过程 存储过程即为能完成特定功能的一组SQL语句集.如果需要对查出的多条数据进行操作的话,这里需要理解游标(CURSOR)的概念,对于oracle有for each row命令,可以不用游标 ...

  6. oracle 触发器学习

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  7. 【MySQL】触发器学习

    MySQL手册中对触发器的定义是: 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象.表必须是永久性表,不能将触发程序与临时表与视图关联起来. 相同触发程序动作时间和事件的给定表 ...

  8. mysql 触发器学习(可以将mysql数据同步到redis)

    1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...

  9. oracle触发器学习

    转自:http://blog.csdn.net/indexman/article/details/8023740/ 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触 ...

随机推荐

  1. ES业界优秀实践案例汇总

    ES业界优秀案例汇总 携程 LinkedIn Etsy国外电商CPU(vCore) 70*32 1000*12 4200单日索引数据条数 600亿 500亿 100亿单核处理数据性能/天 2600万/ ...

  2. WIN7使用VisualSVN建立SVN服务器

    使用SVN开发十分的方便,这样就不用每次都拷贝粘贴来备份了,网上看到一篇给自己的windows电脑安装SVN服务器的使用非常方便. 1.下载安装文件(服务器端和客户端) 服务器端采用VisualSVN ...

  3. 把一串数字表示成千位分隔形式——toLocaleString()

    听说你用什么正则?我这有个骚操作了解下.. toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串. ().toLocaleString('en-US') " ...

  4. CDN(Content Distribution Network)概念

    CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节 ...

  5. (转载)Android支付宝支付封装代码

    Android支付宝支付封装代码 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-12-22我要评论 这篇文章主要介绍了Android支付宝支付封装代码,Android支付的时候 ...

  6. 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找

    题目: 这题要求大于0的最小字段和,常规O(n)求最大字段和的方法肯定是没法解的. 我的解法是:用sum[i]存前i项的和,也就是前缀和. 这题就变成了求sum[j]-sum[i]的大于0的最小值( ...

  7. error C2504: 未定义基类

    出错的情况为: type.h 文件中定义了一个结构体,但只给出了声明 namespace pcl { struct CSDDSignature; } 其定义在type.hpp文件中给出 namespa ...

  8. 用Maven创建第一个web项目Struts2项目

    一.创建一个web项目 参考前面文章,项目名:maven-struts-demo. 二.配置pom.xml文件添加struts2依赖 <project xmlns="http://ma ...

  9. HDU 1233 还是畅通工程【最小生成树】

    解题思路:kruskal算法:贪心选取最短的边构成一棵最小的生成树 共n个点,即先将所有的边排序,然后利用并查集判断,如果两点连通,则不加入树,不连通,则加入树,直到加入了n-1条边,构成生成树. 反 ...

  10. Docker学习笔记(1)----认识Docker

    1. 什么Docker? Docker是一个能把开发的应用程序自动部署到容器的引擎,它使用go语言编写的开源引擎,它在github上面个的地址为:https://github.com/docker/d ...