--1、创建一个触发器,针对于teacher表,如果有人要修改教师的姓名,就输出不能修改教师姓名
CREATE TRIGGER T_UPDATENAME
ON Teacher --对Teacher表起作用
FOR UPDATE --触发条件,insert,delete
AS
IF UPDATE(Tname)
BEGIN
PRINT '不能修改教师姓名'
ROLLBACK TRAN --事物回滚
END
--测试代码,验证触发器是否有效
UPDATE Teacher
SET Tname='字符串'
WHERE Tno='0101'
SELECT *
FROM Teacher
WHERE Tno='0101'
--
ALTER TRIGGER T_INSERT
ON Teacher
FOR INSERT
AS
--两张特殊的表,INSERTED ,DELETED(隐藏),记录刚刚插入或者删除的记录
DECLARE @Tno char(4) --定义的局部变量用来保存从系统表中查出的教师的工号
SELECT @Tno=Tno
FROM INSERTED
PRINT @Tno
IF LEFT(@Tno,2)!='11'
PRINT '不能插入该记录'
ROLLBACK TRAN
--测试触发器语句
INSERT INTO Teacher
(Tno,Tname,Ttitle)
VALUES
('0997','ZIFUCHUAN','教授')
--2、为ProductSales数据库中的产品表创建一个名为update_pno的UPDATE触发器,
--该触发器的作用是禁止更新产品表中的“ProductName”字段的内容。
--并用UPDATE语句修改产品表中第一条记录为:1 HP1500 打印机 2000
--要求显示“不能修改产品名称”的警告信息。
CREATE TRIGGER update_pno
ON Product
FOR UPDATE
AS
IF UPDATE(ProductName)
BEGIN
PRINT '不能修改产品名称'
ROLLBACK TRAN
END
--测试触发器
UPDATE Product
SET ProductID='1',ProductName='HP1500 打印机',Price='2000'
WHERE ProductID=(SELECT TOP 1 ProductID
FROM product)
--3、为factory数据库中的职工表创建一个名为update_name的UPDATE触发器,
--该触发器的作用是禁止更新职工表中的“姓名”字段的内容。
--并用UPDATE语句修改职工表中工号为‘2’的职工姓名为“陈晨”,
--要求显示“不能修改职工姓名”的警告信息。
ALTER TRIGGER update_name
ON Worker
FOR UPDATE
AS
IF UPDATE (Wname)
BEGIN
PRINT '不能修改职工姓名'
ROLLBACK TRAN
END
UPDATE Worker
SET Wname='陈晨' WHERE Wno='2'
UPDATE Worker
SET Wname='孙天奇' WHERE Wno='2'
--4、为“学生选课数据库”数据库中的选课表创建一个名为update_fenshu的UPDATE触发器,
--该触发器的作用是禁止更新选课表中的“分数”字段的内容。并演示用UPDATE语句修改“选课”表中第一条记录为分数改为80:
--要求显示“不能修改分数”的警告信息。
USE xueshengxuanke
GO
CREATE TRIGGER update_fenshu
ON xuanke
FOR UPDATE
AS
IF UPDATE(Result)
BEGIN
PRINT '不能修改分数'
ROLLBACK TRANSACTION
END
USE xueshengxuanke
GO
UPDATE xuanke
SET Result='80'
WHERE Sno='090101'
--5、为jieyue数据库中的“借书记录” 表创建一个名为insert_jie的insert触发器,
--该触发器的作用是每当借书表插入一条记录,相应的“图书”表应该减少1本该书的库存数量。并用insert语句触发事件,截图相应结果。
USE jieyue
GO
ALTER TRIGGER insert_jie
ON [dbo].[borrow]
FOR INSERT
AS
DECLARE @BID CHAR(6)
SELECT @BID=BID
FROM INSERTED
PRINT @BID
IF @BID IN (SELECT BID FROM books)
BEGIN
UPDATE books SET num=(num-1)
WHERE BID=@BID
END
USE jieyue
GO
INSERT INTO borrow
(id,BID,lenddate,returndate1)
VALUES
('0001','bsn005','2009-10-10','2009-12-10')
SELECT *FROM books
SELECT * FROM borrow
DELETE FROM borrow
WHERE BID='bsn005'
UPDATE books
SET num=(num+2)
WHERE BID='bsn005'
--6、为jieyue数据库中的“还书记录” 表创建一个名为insert_huan的insert触发器,
--该触发器的作用是每当还书表插入一条记录,相应的“图书”表应该增加1本该书的库存数量。并用insert语句触发事件,截图相应结果。
USE jieyue
GO
CREATE TRIGGER insert_huan
ON [dbo].[return]
FOR INSERT
AS
DECLARE @BID CHAR(6)
SELECT @BID=BID
FROM INSERTED
PRINT @BID
IF @BID IN (SELECT BID FROM books)
BEGIN
UPDATE books SET num=(num+1)
WHERE BID=@BID
END
USE jieyue
GO
INSERT INTO [return]
(id,BID,returndate)
VALUES
('0001','bsn005','2009-12-10')
SELECT * FROM books
SELECT * FROM [return]
SQL触发器举例
最新推荐文章于 2025-09-09 21:44:26 发布
1910

被折叠的 条评论
为什么被折叠?



