--触发器学习
-------------------------------------------------------------------------------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. httputil用http获取请求的工具类

    package com.xiaocan.demo.util; import java.io.IOException; import java.io.InputStream; import java.u ...

  2. FriendlyARM交叉工具链以及编译第一个arm9应用

    不记录什么都会忘光!!!这两天又要用到开发板来做项目,可是好久没有碰了,最近一直在搞上层的东东,对rails和前端感兴趣,我这是不要毕业的节奏了吗?好吧,既然什么都忘光掉了,那就干脆来个痛快,重新装机 ...

  3. oracle 11g sql优化之行迁移处理(加大BLOCK块)

    行链接 产生原因:当一行数据大于一个数据块,ORACLE会同时分配两个数据块,并在第一个块上登记第二个块的地址,从而形成行链接. 预防方法:针对表空间扩大数据块大小.检查:analyze table ...

  4. hihocoder 1407 重复旋律2

    思路: 二分一哈答案 height分个块 //By SiriusRen #include <cstdio> #include <cstring> #include <al ...

  5. sql server 无法创建索引 因为对象名称和索引名称重复

    需求分析:如下图所示,给T_DD_OP1200_Final表的Id字段添加主键,保存时弹出 “T_DD_OP1200_Final”表- 无法创建索引“PK_T_DD_OP1200_Final”. 因为 ...

  6. 持久层框架Clone

    Clone框架:http://www.52chloe.com/Wiki/Document/3324802610879266816 Clone框架支持多种数据库,我用的是sql server 基本查询: ...

  7. (转载)项目实战工具类(一):PhoneUtil(手机信息相关)

    项目实战工具类(一):PhoneUtil(手机信息相关)   可以使用的功能: 1.获取手机系统版本号 2.获取手机型号 3.获取手机宽度 4.获取手机高度 5.获取手机imei串号 ,GSM手机的 ...

  8. Codeforces 987A. Infinity Gauntlet(手速题,map存一下输出即可)

    解法: 1.先将对应的字符串存入map. 2.然后将输入的串的second置为空. 3.输出6-n,输出map中的非空串. 代码: #include <bits/stdc++.h> usi ...

  9. vue项目input的placeholder根据用户的选择改变

    html部分 <el-input :placeholder="holder" v-model="searchKey"> <el-select ...

  10. WebSocket 前端封装

    $.extend({ socketWeb:function (opt) { if("WebSocket" in window){ var setting=$.extend({ ur ...