--1、为ProductSales数据库中的产品表创建一个名为update_pno的UPDATE触发器,--该触发器的作用是禁止更新产品表中的“ProductName”字段的内容。--并用UPDATE语句修改产品表中第一条记录为:1 HP1500 打印机 2000--要求显示“不能修改产品名称”的警告信息。CREATETRIGGER update_pno
ON Product
FORUPDATEASIFUPDATE(ProductName)BEGINPRINT'不能修改产品名称'ROLLBACKTRANEND--测试触发器UPDATE Product
SET ProductID='1',ProductName='HP1500 打印机',Price='2000'WHERE ProductID=(SELECTTOP1 ProductID
FROM product)--2、为factory数据库中的职工表创建一个名为update_name的UPDATE触发器,--该触发器的作用是禁止更新职工表中的“姓名”字段的内容。--并用UPDATE语句修改职工表中工号为‘2’的职工姓名为“陈晨”,--要求显示“不能修改职工姓名”的警告信息。ALTERTRIGGER update_name
ON Worker
FORUPDATEASIFUPDATE(Wname)BEGINPRINT'不能修改职工姓名'ROLLBACKTRANENDUPDATE Worker
SET Wname='陈晨'WHERE Wno='2'UPDATE Worker
SET Wname='孙天奇'WHERE Wno='2'--3、为MyQQ数据库编写一个带参数的存储过程proc_Star,--它可以查询和某用户同一星座的用户的姓名和性别,并调用该存储过程验证其功能。IFEXISTS(SELECT*FROM SYSOBJECTS WHERE name ='proc_star')DROPPROC proc_Star
CREATEPROCEDURE proc_Star
@starVARCHAR(50)ASSELECT NickName 姓名,Sex 性别
FROM Users
WHERE Star IN(SELECT Star
FROM Users
WHERE Star=@star)EXEC proc_Star '双子座'--4、创建一个带参数的存储过程proc_keshi:计算某教师授课总课时,--并将值返回的存储过程以及执行代码。执行存储过程:计算“郭浩”的总课时。IFEXISTS(SELECT*FROM SYSOBJECTS WHERE name ='proc_keshi')DROPPROC proc_keshi
CREATEPROCEDURE proc_keshi
@Tname nvarchar(50)ASSELECTSUM(Cclass) 总课时
FROM teach INNERJOIN teacher
ON teach.Tno=teacher.Tno
WHERE Tname=@TnameEXEC proc_keshi '郭浩'--5、teacher数据库的teacher表中创建一个INSERT 触发器T_insert,--当向teacher表中插入数据时,要求学号必须以“1102”开头,否则取消插入操作,--并提示错误“输入的教师工号错误,请确认后重新录入!”的警告信息。ALTERTRIGGER T_insert
ON teacher
FORINSERTASDECLARE@teacher_idchar(8)IFLEFT(@teacher_id,4)!=1102BEGINPRINT'输入的教师工号错误,请确认后重新录入!'ROLLBACKTRANENDINSERTINTO teacher
VALUES('1102011','04','郭浩','3500','编译原理','33')INSERTINTO teacher
VALUES('1111111','04','郭浩','3500','编译原理','33')--一此题待修改!!!!--6、为“学生选课数据库”数据库中的选课表创建一个名为update_fenshu的UPDATE触发器,--该触发器的作用是禁止更新选课表中的“分数”字段的内容。--并演示用UPDATE语句修改“选课”表中第一条记录为分数改为80--如图:090101 100002 80--要求显示“不能修改分数”的警告信息。CREATETRIGGER update_fenshu
ON xuanke
FORUPDATEASIFUPDATE(Result)BEGINPRINT'不能修改分数'ROLLBACKTRANENDUPDATE xuanke
SET Result='80'WHERE Sno=(SELECTTOP1 Sno
FROM xuanke)AND Cno=(SELECTTOP1 Cno
FROM xuanke)UPDATE xuanke
SET Result='78'WHERE Sno=(SELECTTOP1 Sno
FROM xuanke)AND Cno=(SELECTTOP1 Cno
FROM xuanke)--7、为jieyue数据库中的“借书记录” --表创建一个名为insert_jie的insert触发器,--该触发器的作用是每当借书表插入一条记录,--相应的“图书”表应该减少1本该书的库存数量。--并用insert语句触发事件,截图相应结果。CREATETRIGGER insert_jie
ON borrow
FORINSERTASBEGINUPDATE books
SET num=num-1WHERE BID=(SELECT BID FROM INSERTED)ENDINSERT borrow
VALUES('0003','bsn001','2020-5-11','2020-6-11')CREATETRIGGER insert_jie1
ON borrow
FORINSERTASDECLARE@bsnVARCHAR(50)SELECT@bsn=BID
FROM INSERTED
PRINT@bsnBEGINUPDATE books
SET num=num-1WHERE BID=@bsnENDINSERT borrow
VALUES('0003','bsn001','2020-5-11','2020-6-11')--8、为jieyue数据库中的“还书记录” --表创建一个名为insert_huan的insert触发器,--该触发器的作用是每当还书表插入一条记录,--相应的“图书”表应该增加1本该书的库存数量。--并用insert语句触发事件,截图相应结果。CREATETRIGGER insert_huan
ON[return]FORINSERTASBEGINUPDATE books
SET num=num+1WHERE BID=(SELECT BID FROM INSERTED)ENDINSERT[return]VALUES('0003','bsn001','2020-6-10')