SQL Server触发器练习

    触发器的使用,其实在日常生活中还是很有帮助的。当你对一张表进行数据的怎删改查操作的时候,同时也相对另外一张甚至几张表进行同步修改操作,这个时候就会运用到触发器的概念。

      我记得我刚接触触发器的时候是因为我的毕业设计需求。当对员工表进行修改时,自动修改管理员表,这里用到了update触发器;当对员工表进行新增的时候,自动在管理员表中添加字段,并且创建初始的用户名,密码,这里用到了insert触发器。

      触发器的运用可以极大程度上的减少我们对于多张表同时添加数据时的复杂程度。

下面是我自己练习时使用的测试代码:

/*create table student(        stu_id int identity(1,1) primary key,   stu_name varchar(10),   stu_gender char(2),   stu_age int, )*/ /* --创建insert触发器 create trigger trig_insert on student after insert as begin      if OBJECT_ID(N'student_sum',N'U') is null--判断student_sum表是否存在    create table student_sum(stuCount int default(0));--创建存储学生人数的student_sum表 declare @stuNumber int; select @stuNumber = count(*) from student; if not exists (select * from student_sum)--判断表中是否有记录    insert into student_sum values(0); update student_sum set stuCount = @stuNumber;--把更新后总的学生数插入到student_sum表中 end*/ --测试触发器trig_insert-->功能是向student插入数据的同时级联插入到student_sum表中,更新stuCount --因为是后触发器,所以先插入数据,才出发触发器; --drop trigger tri_delete; /*insert into student(stu_name,stu_gender,stu_age)values('吕布','男',30); select stuCount 学生总人数 from student_sum; insert into student(stu_name,stu_gender,stu_age)values('貂蝉','女',30); select stuCount 学生总人数 from student_sum; insert into student(stu_name,stu_gender,stu_age)values('曹阿曼','男',40); select stuCount 学生总人数 from student_sum;*/ /*--创建insert_forbidden,禁止用户向student_sum表中插入数据 create trigger insert_forbiggen on student_sum after insert as begin      RAISERROR('禁止直接向该表中插入数据,操作被禁止',1,1)--raiserror是用于抛出一个错误 rollback transaction end*/ --触发触发器insert_forbiggen /*insert into student_sum(stuCount)values(6);*/ --创建delete触发器 /*create trigger trig_delete on student after delete as begin       select stu_id as 已删除的学生编号,stu_name,stu_gender,stu_age  from deleted end*/ --执行一条delete语句触发trig_delete触发器 --delete from student where stu_id = 7; --创建update触发器 /*create trigger trig_update on student after update as begin      declare @stuCount int; select @stuCount = count(*) from student; update student_sum set stuCount = @stuCount; select stu_id as 更新前学生编号,stu_name as 更新前学生姓名 from deleted select stu_id as 更新后学生编号,stu_name as 更新后学生姓名 from inserted end*/ --创建完成,执行一条语句触发trig_update触发器 --update student set stu_name = '张飞' where stu_id = 8; --创建替代触发器 --创建instead of触发器 /*create trigger trig_inteadOf on student instead of insert as begin      declare @stuAge int; select @stuAge = (select stu_age from inserted) if(@stuAge > 120) select '插入年龄错误' as '失败原因' end*/ --执行语句触发 --insert into student (stu_name,stu_gender,stu_age) values ('子龙','男',130); --禁用嵌套 --exec sp_configure 'nested triggers',0; --启用嵌套 --exec sp_configure 'nested triggers',1; --查看触发器 --查看数据库中所有的触发器 /*use student go select * from sysobjects where xtype = 'TR'*/ --.sp_helptext查看触发器内容 /*use student go exec sp_helptext 'trig_insert'*/ --.sp_helptrigger查看触发器的属性 /*use student go exec sp_helptrigger student*/ --禁用触发器 --alter table student disable trigger trig_insert --禁用触发器 --alter table student enable trigger trig_insert

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券