SQL触发器举例

--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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值