SQL server 创建触发器详解
Posted 算力鬼才信
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server 创建触发器详解相关的知识,希望对你有一定的参考价值。
触发器定义:一种特殊类型的存储过程,不同于存储过程。存储过程 调用名称执行,触发器的调用 通过事件触发 自动调用执行 。
触发器分类:1、DML触发器
数据库再创建触发器时会在内存中创建了两个专用表﹕Inserted表和Deleted表。这两个表由系统来维护,当触发器 被激发完成后,与触发器相关的Inserted和Deleted这两个表也被删除
2、DDL触发器
DML(Data Manipulation Language)触发器
对表操作 | inserted | deleted |
insert | 存放插入的数据 | 无 |
update | 存放更新后的数据 | 存放更新前的数据 |
delete | 无 | 存放被删除的数据 |
inserted 存放插入或更新后数据
deleted 存放更新前或删除的数据
今天我先介绍都DML触发器-插入和更新操作
DML触发器分为两种 :
after 触发器 insert 、update、delete 执行完操作后,再去执行触发器本身
instered of 触发器 insert 、update、delete 只执行触发本身
两者是相互对立,最好不要在一张表中同时创建这两种触发器。
--创建 after insert 触发器:对表操作(我们对表执行插入操作时就会执行)
创建语法格式:
create trigger 触发器名称
on 表名
after insert /for insert
as
T-SQL 语句
go
执行效果:
alter trigger ...(对创建的触发器某些操作不满意,重新修改 )
触发 触发器 insert into 表名 (字段、字段、字段 ..)values(对应字段插入值) 为什么执行插入insert ,因为开始我就是创建的是after insert 触发器 。
创建 after update 触发器 (我们对表执行更新操作时就会执行)
学习触发器之前我们只能看见update 更新后的数据
create trigger 创建触发器名称
on dbo.test
after update
as
--T-sql
go
执行效果:
本次执行过程执行的是 update(更新操作),而且还做了,将进行修改的数据,在修改前进行了,保存,通过语句 select * into 表名 from deleted (将更新前的数据保存在了testbackup表中)
因为刚才讲过了,after 触发器 insert 、update、delete 执行完操作后,再去执行触发器本身,我们在T-sql 语句中设置了会将更新前的数据保存在,testbackup 表中,所以我们会先去执行select*into testbackup from deleted 先把更新前数据保存后,再去执行 插入id=3 MNname= SQLserver age=22 这条语句。
我们去看一下testbackup这张表装的是什么
没错装的就是执行更新操作前 标识符 id= 3 的信息行装的数据 ,它原来是 MNname = 计算机 ,age= 3,我们将他更新成了 MNname =SQLserver ,age= 22 。
通过这个操作 ,我们也明白了 更新操作其实就是,先删除再去插入。
总结: 本次DML触发器,我了解学习的也是很模糊,有些地方也没有给大家解释清楚,不过没有关系,同学们有什么看不懂欢迎发送私信提问,共同努力共同进步。
SQL Server 触发器事务以及存储过程详解
触发器(trigger)
在使用触发器的同时一般会牵扯到两张表,这两张表只读且是虚拟的表一个是inserted(增加表)另外一个是deleted(删除表)
这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完工后,这两张表就会被删除inseted是存插入和修改的数据,deleted则是存储
删除的的数据
语法: create trigger tgr_name(触发器名称)
on table_name(表名)
with encrypion --加密触发器
for update(insert、delete等)
as
Transact-SQL( 一些SQL语句、类似于下面这这串代码)
--定义变量 declare @password varchar(20),@UserName varchar(20), @temp int,@birthday datetime; --在 inserted(虚拟表)表中查询已经插入的记录信息 select @password=password,@UserName=UserName,@birthday=Birthday,@temp=Gender from inserted; -- set @[email protected]+CONVERT(varchar,@password); --set @[email protected]/2; insert into SYS_Users(UserName,Password,Gender,Birthday) values(@UserName,@password,@temp,@birthday); --打印信息提示成功 print ‘添加用户成功‘
删除触发器T-SQL语句备份解析
例子: SYS_Users 表名 .‘U‘指类型表
as print ‘备份数据库中.......‘; if(OBJECT_ID(‘SYS_Users‘,‘U‘)is not null) --存在SYS_Users 表,直接插入数据 insert into SYS_Users select UserName,[Password],Gender,Birthday,CreateDate,IsDelete from deleted else --不存在classesBackup创建再插入 select * into SYS_Users1 from deleted; print ‘备份数据成功!‘;
insert into SYS_Users select UserName,[Password],Gender,Birthday,CreateDate,IsDelete from deleted
上面这串代码表示在 SYS_Users 插入 deleted 的信息,也就是删除的的数据从而达到了备份的效果
select * into SYS_Users1 from deleted;
上面这串语句表示 创建一张和deleted数据结构相同的新表,表的名称为 SYS_Users1,并且将deleted里面的数据添加到 SYS_User1表中
以上是关于SQL server 创建触发器详解的主要内容,如果未能解决你的问题,请参考以下文章