--1、创建一个触发器,针对于teacher表,如果有人要修改教师的姓名,就输出不能修改教师姓名CREATETRIGGER T_UPDATENAME
ON Teacher --对Teacher表起作用FORUPDATE--触发条件,insert,deleteASIFUPDATE(Tname)BEGINPRINT'不能修改教师姓名'ROLLBACKTRAN--事物回滚END--测试代码,验证触发器是否有效UPDATE Teacher
SET Tname='字符串'WHERE Tno='0101'SELECT*FROM Teacher
WHERE Tno='0101'--ALTERTRIGGER T_INSERT
ON Teacher
FORINSERTAS--两张特殊的表,INSERTED ,DELETED(隐藏),记录刚刚插入或者删除的记录DECLARE@Tnochar(4)--定义的局部变量用来保存从系统表中查出的教师的工号SELECT@Tno=Tno
FROM INSERTED
PRINT@TnoIFLEFT(@Tno,2)!='11'PRINT'不能插入该记录'ROLLBACKTRAN--测试触发器语句INSERTINTO Teacher
(Tno,Tname,Ttitle)VALUES('0997','ZIFUCHUAN','教授')--2、为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)--3、为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'--4、为“学生选课数据库”数据库中的选课表创建一个名为update_fenshu的UPDATE触发器,--该触发器的作用是禁止更新选课表中的“分数”字段的内容。并演示用UPDATE语句修改“选课”表中第一条记录为分数改为80:--要求显示“不能修改分数”的警告信息。USE xueshengxuanke
GO
CREATETRIGGER update_fenshu
ON xuanke
FORUPDATEASIFUPDATE(Result)BEGINPRINT'不能修改分数'ROLLBACKTRANSACTIONENDUSE xueshengxuanke
GO
UPDATE xuanke
SET Result='80'WHERE Sno='090101'--5、为jieyue数据库中的“借书记录” 表创建一个名为insert_jie的insert触发器,--该触发器的作用是每当借书表插入一条记录,相应的“图书”表应该减少1本该书的库存数量。并用insert语句触发事件,截图相应结果。USE jieyue
GO
ALTERTRIGGER insert_jie
ON[dbo].[borrow]FORINSERTASDECLARE@BIDCHAR(6)SELECT@BID=BID
FROM INSERTED
PRINT@BIDIF@BIDIN(SELECT BID FROM books)BEGINUPDATE books SET num=(num-1)WHERE BID=@BIDENDUSE jieyue
GO
INSERTINTO borrow
(id,BID,lenddate,returndate1)VALUES('0001','bsn005','2009-10-10','2009-12-10')SELECT*FROM books
SELECT*FROM borrow
DELETEFROM borrow
WHERE BID='bsn005'UPDATE books
SET num=(num+2)WHERE BID='bsn005'--6、为jieyue数据库中的“还书记录” 表创建一个名为insert_huan的insert触发器,--该触发器的作用是每当还书表插入一条记录,相应的“图书”表应该增加1本该书的库存数量。并用insert语句触发事件,截图相应结果。USE jieyue
GO
CREATETRIGGER insert_huan
ON[dbo].[return]FORINSERTASDECLARE@BIDCHAR(6)SELECT@BID=BID
FROM INSERTED
PRINT@BIDIF@BIDIN(SELECT BID FROM books)BEGINUPDATE books SET num=(num+1)WHERE BID=@BIDENDUSE jieyue
GO
INSERTINTO[return](id,BID,returndate)VALUES('0001','bsn005','2009-12-10')SELECT*FROM books
SELECT*FROM[return]