SQL_触发器学习
--触发器学习
-------------------------------------------------------------------------------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_触发器学习的更多相关文章
- 触发器学习笔记(:new,:old用法)
触发器学习笔记(:new,:old用法) 触发器是数据库发生某个操作时自动运行的一类的程序 用于保持数据的完整性或记录数据库操作信息方面 触发器不能够被直接调用,只能够 ...
- SQL触发器学习
简介 触发器是一种特殊类型的存储过程.触发器分为: DML( 数据操纵语言 Data Manipulation Language)触发器:数据库中表或视图的数据更改时触发,包括insert,upd ...
- 一篇很棒的 MySQL 触发器学习教程
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- SQL server触发器学习记录
作为C#程序员,我工作内容基本就是winform,wpf,asp.net.sql接触的比较少,今天突然来了一个ticket要我修改触发器脚本....只会select*的我顿感迷茫... 需求描述:as ...
- SQLServer存储过程和触发器学习记录及简单例子
一.存储过程 存储过程即为能完成特定功能的一组SQL语句集.如果需要对查出的多条数据进行操作的话,这里需要理解游标(CURSOR)的概念,对于oracle有for each row命令,可以不用游标 ...
- oracle 触发器学习
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
- 【MySQL】触发器学习
MySQL手册中对触发器的定义是: 触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象.表必须是永久性表,不能将触发程序与临时表与视图关联起来. 相同触发程序动作时间和事件的给定表 ...
- mysql 触发器学习(可以将mysql数据同步到redis)
1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...
- oracle触发器学习
转自:http://blog.csdn.net/indexman/article/details/8023740/ 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触 ...
随机推荐
- javaweb学习总结(六)——Servlet开发(三) 常见问题疑问
[1]response.getWriter().write()与out.print()的区别http://blog.csdn.net/javaloveiphone/article/details/81 ...
- JAVA配置Tomcat
1.下载tomcat,我jdk是1.8的,网上查了一下,说要安装tomcat8及以上的tomcat 尝试点击,弹出, 2.配置环境 3.安装通过cmd安装 4.点击开启服务 5.输入localhost ...
- iOS对象方法和类方法的区别与调用方式
作为一个iOS程序员初学者,会搞不清楚对象方法和类方法的区别 -(void)duixiangfangfa ; +(void)leifangfa; - 代表实例方法,它在类的一个具体实例范围内执行,也就 ...
- ANSI编码
ANSI编码 ANSI简介 不同的国家和地区制定了不同的标准,由此产生了 GB2312.GBK.Big5.Shift_JIS 等各自的编码标准.这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸 ...
- 133.throw机制 抛出类类型
#include <iostream> using namespace std; //try尝试执行,抛出throw,throw之后语句不再执行 //catch处理throw的异常 voi ...
- mysql读写分离原理及配置
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- python中index、slice与slice assignment用法
python中index.slice与slice assignment用法 一.index与slice的定义: index用于枚举list中的元素(Indexes enumerate the elem ...
- the prblem 3n+1
题目描述计算机科学中的问题通常被归类为属于某一类问题(例如,NP,不可解,递归).在这个问题中,您将分析算法的属性,该算法的分类对于所有可能的输入都是未知的. 考虑下面的算法: 1.输入n 2.输出n ...
- span文本自动换行
.span{ word-wrap: break-word; word-break: break-all; overflow: hidden; }
- ueditor 编辑器,自定义图片上传
<div> <h1>完整demo</h1> <form method="post" name="form"> & ...