SQL触发器
翻看博客,发现居然没有触发器使用说明,现补上。
触发器触发的时候两个特殊的表:
插入表(instered表):Inserted表的数据是插入或是修改后的数据
删除表(deleted表):deleted表的数据是更新前的或是删除的数据
这两张表的结构与被改触发器应用的表的结构相同,存储的数据是要进行操作的数据,当触发器完成工作后,这两张表就会被删除。
修改操作记录 | inserted表 | deleted表 |
增加(insert)记录 | 存放新增的记录 | ............ |
删除(deleted)记录 | .............. | 存放被删除的记录 |
修改(update)记录 | 存放更新后的记录 | 存放更新前的记录 |
Instead of 和 After触发器
Instead of触发器:用于替代引起触发器执行的T-SQL语句。除表之外,Instead of 触发器也可以用于视图,用来扩展视图可以支持的更新操作。
After触发器:在一个Insert,Update或Deleted语句之后执行,进行约束检查等动作都在After触发器被激活之前发生。After触发器只能用于表。
一个表或视图的每一个修改动作(insert,update和delete)都可以有一个instead of 触发器,一个表的每个修改动作都可以有多个After触发器。
触发器的添加,修改,删除,查看操作
1 添加创建语法
create trigger trigger_name
on {table_name | view_name}
{for | After | Instead of }
[ insert, update,delete ]
as
sql_statement
2 修改语法
alter trigger trigger_name--类似于修改表结构
3 删除语法
drop trigger trigger_name
4 查看触发器
select * from sys.triggers
select * from sysobjects where xtype='TR'---- 查看单个触发器exec sp_helptext '触发器名'
触发器实例
--1 创建触发器,触发添加内容 Create TRIGGER [dbo].[s1] ON [dbo].[A] FOR insert as DECLARE @id VARCHAR(50) DECLARE @name varchar(50) DECLARE @nos INT SELECT @id=[ID] ,@name=a.Name,@nos=a.number FROM a AS a INSERT INTO B( IC, CName, No -- AID -- this column value is auto-generated ) VALUES(@id,@name,@nos) ---2删除内容,触发级联删除 Create trigger [dbo].[tri_deletemember]on [dbo].[Member] for delete as declare @ID VARCHAR(150) select @ID=ID from deleted delete from MemCount where ID=@ID delete from MemMoney where @ID=@ID
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341