下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】
触发器
1、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。
被触发事件就是一个print语句
after (for)触发器“触发事件”和“被 触发事件”都执行
----------创建ts更新触发器2----------
--create trigger ts更新触发器2
--on ts
--after update
--as
-- print '图书表更新成功'----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_2'
--where 总编号 = 999999
2、为dz表插入触发器dz_insert,在插入记录后提示“借书证号为XXXX的读者记录已被插入”,其中XXXX为插入的具体字段值;
--use 图书管理----------创建dz的插入触发器----------
--create trigger dz插入触发器
--on dz
--after insert
--as
--begin
-- declare @x nvarchar(10)
-- select @x = 借书证号
-- from inserted
-- print '借书证号为' + @x + '的读者记录已被插入'
--end----------dz插入触发器的测试----------
--insert into dz
--values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424')
声明变量 @x,用于存储借书证号
从 inserted 表中获取插入记录的 借书证号
3、为图书表设置更新触发器,根据总编号来更新书名(根据图书编号找到相应记录,更新书名),更新完毕后提示“更新后的总编号为:XX,书名为:XX”(其中XX代表相应字段的值);
输入update语句,例如将总编号为J007的图书名改为网络安全基础,测试更新触发器。
----------创建ts更新触发器----------
--create trigger ts更新触发器
--on ts
--after update
--as
--begin
------声明变量
-- declare @x nvarchar(10) --总编号
-- declare @a nvarchar(10) --书名
------从inserted表中找出修改的编号
-- select @x = 总编号,@a = 书名
-- from inserted------输出结果
-- print '更新后的总编号为:'+@x+',书名为:'+@a
--end----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_1'
--where 总编号 = 999999
变量需要先声明再赋值
赋值
select语句不能同时完成赋值和查询两种操作
4、为ts设置删除触发器,若删除ts记录,则jy表中的相关书籍的记录也应删除,并提示“ts表和jy表相关记录已一并删除” ;编写测试语句进行测试。
---------创建ts删除触发器----------
--create trigger ts删除触发器
--on ts
--after delete
--as
--begin
-- declare @x nvarchar(10)
-- select @x = 总编号
-- from deleted
-- delete from jy
-- where 总编号 = @x
-- print 'ts表和jy表相关记录已一并删除'
--end----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 445501
5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。
----------创建ts禁止删除触发器----------
--create trigger ts禁止删除
--on ts
--instead of delete
--as
--print '对不起,不允许删除操作'----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 999999
6、为“成绩管理”数据库中的tscore表设置触发器,限制“数据库”课程选课人数不超过3人,若选满,则提示“对不起,已选满!”
create trigger trigger8
on tScore
after insert
asif ((select count(*) from tCourse,tScore where tCourse.课程编号=tScore.课程编号 and 课程名='数据库')>3)begindelete from tScore where 学号 in (select 学号 from inserted) and 课程编号=(select 课程编号 from tCourse where 课程名=‘数据库')print'对不起,已选满!'end
完整代码:
--一、触发器--1、为dz表和ts表设计分别在插入记录后提示“借书证号为XXXX的读者记录已被插入”或“总编号为XXXX的图书记录已被插入”,
--其中XXXX为插入的具体字段值;写一条insert语句,插入记录,对插入触发器进行测试。--use 图书管理----------创建dz的插入触发器----------
--create trigger dz插入触发器
--on dz
--after insert
--as
--begin
-- declare @x nvarchar(10)
-- select @x = 借书证号
-- from inserted
-- print '借书证号为' + @x + '的读者记录已被插入'
--end----------dz插入触发器的测试----------
--insert into dz
--values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424')----------创建ts的插入触发器----------
--create trigger ts插入触发器
--on ts
--after insert
--as
--begin
-- declare @x nvarchar(10)
-- select @x = 总编号
-- from inserted
-- print '总编号为' + @x + '的图书记录已被插入'
--end----------ts插入触发器的测试----------
--insert into ts
--values('999999','ceshi','张三','电子工业出版社','TP',24)--2、为图书表设置更新触发器,根据图书编号来更新书名、作者、出版社、分类号和单价
--(根据图书编号找到相应记录,然后更新书名、作者等信息),
--更新完毕后提示“更新后的总编号为:XX,书名为:XX”
--(其中XX代表相应字段的值);输入update语句,例如将图书编号为J007的图书名改为网络安全基础,测试更新触发器。--use 图书管理----------创建ts更新触发器----------
--create trigger ts更新触发器
--on ts
--after update
--as
--begin
------声明变量
-- declare @x nvarchar(10) --总编号
-- declare @a nvarchar(10) --书名
------从inserted表中找出修改的编号
-- select @x = 总编号,@a = 书名
-- from inserted------输出结果
-- print '更新后的总编号为:'+@x+',书名为:'+@a
--end----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_1'
--where 总编号 = 999999--3、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,
--然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。----------创建ts更新触发器2----------
--create trigger ts更新触发器2
--on ts
--after update
--as
-- print '图书表更新成功'----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_2'
--where 总编号 = 999999--4、为dz表设置删除触发器,若删除dz记录,则jy表中相关记录也应删除,
--并提示“dz表和jy表相关记录已一并删除” ;编写测试语句进行测试。----------创建ts删除触发器----------
--create trigger ts删除触发器
--on ts
--after delete
--as
--begin
-- declare @x nvarchar(10)
-- select @x = 总编号
-- from deleted
-- delete from jy
-- where 总编号 = @x
-- print 'ts表和jy表相关记录已一并删除'
--end----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 445501--5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。----------创建ts禁止删除触发器----------
--create trigger ts禁止删除
--on ts
--instead of delete
--as
--print '对不起,不允许删除操作'----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 999999--6、使用查看命令查看dz表中已创建的触发器;使用命令查看某各触发器代码。--sp_helptrigger @tabname = ts
--sp_helptext ts插入触发器--7、修改某触发器的名称。--sp_rename ts删除触发器, ts删除--8、方法一、替换触发器
--create trigger 触发器1 on tScore
--instead of insert
--as
--begin
-- declare @sum nvarchar(50)
-- select @sum=COUNT(课程编号) from tScore
-- where 课程编号=(select 课程编号 from tCourse where 课程名='数据库')
-- if @sum>3
-- print '对不起,已选满'
-- else
-- insert into tScore select * from inserted
--end
--方法二:后触发器
--create trigger trigger8
--on tScore
--after insert
--as
-- if ((select count(*) from tCourse,tScore where tCourse.课程编号
-- =tScore.课程编号 and 课程名='数据库')>3)
-- begin
-- delete from tScore where 学号 in (select 学号 from inserted)
-- and 课程编号=(select 课程编号 from tCourse where 课程名=‘
-- 数据库')
-- print'对不起,已选满!'
-- end