欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sqlserver 触发器

程序员文章站 2022-05-09 09:17:00
...

Sqlserver 触发器

触发器是在对数据表 新增 修改 和删除的时候 进行一次自定义事件的处理

就是 比如 为新增一条数据 的时候 自动触发一个事件 来验证这个数据在别的表的关系  不然还得在应用里增加逻辑

数据库可以用触发器来实现

create trigger 触发器名 on 表名  for delete /insert /update as   触发器要执行的操作

举例子 

成绩表 与科目表 

Sqlserver 触发器

 

触发器 在插入成绩表的时候 检测 科目表 是否有这个科目

create trigger Tri_insert on TScore for insert
 as 
 declare @num int;
 select @num = Count(*) from TSubject where subJectID in(select [subJectID] from inserted)
 if @num<=0
 begin
 raiserror('非法插入',16,1);
 rollback tran
 end

执行后 会创建好一个触发器

Sqlserver 触发器

执行 插入语句

Sqlserver 触发器

失败了~~

换成 0003

Sqlserver 触发器

成功~

 

代码解释

主要说:inserted  是一个前表 什么意思那 在执行插入的时候都会先存 在这个 inserted表里  inserted里包含(整个表的数据)

比如 如果0000001的学生已经存在了 我们有插入一个00000001的学生 我们怎么写触发器?显然我们要知道 0000001要有俩条以上

create trigger Tri_Student on TStudent for insert
 as 
 declare @num int;
 select @num = Count(*) from TStudent where [StudentID] in(select [StudentID] from inserted)
 if @num>1
 begin
 raiserror('同一学生不能有俩条数据',16,1);
 rollback tran
 end

新增一行数据 发现 insert 不进去  也报了设定的错误

Sqlserver 触发器

 

同理 删除 和修改 都有 这种表 前表

deleted 和updated

raiserror  固定格式使用

 raiserror('同一学生不能有俩条数据',16,1);

讲一下 insert 做引入  删除 和修改 使用方式都一样  

 

 

相关标签: Sqlserver 触发器