--1、为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)
--2、为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'
--3、为MyQQ数据库编写一个带参数的存储过程proc_Star,
--它可以查询和某用户同一星座的用户的姓名和性别,并调用该存储过程验证其功能。
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE name ='proc_star')
DROP PROC proc_Star
CREATE PROCEDURE proc_Star
@star VARCHAR(50)
AS
SELECT NickName 姓名,Sex 性别
FROM Users
WHERE Star IN (SELECT Star
FROM Users
WHERE Star=@star)
EXEC proc_Star '双子座'
--4、创建一个带参数的存储过程proc_keshi:计算某教师授课总课时,
--并将值返回的存储过程以及执行代码。执行存储过程:计算“郭浩”的总课时。
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE name ='proc_keshi')
DROP PROC proc_keshi
CREATE PROCEDURE proc_keshi
@Tname nvarchar(50)
AS
SELECT SUM(Cclass) 总课时
FROM teach INNER JOIN teacher
ON teach.Tno=teacher.Tno
WHERE Tname=@Tname
EXEC proc_keshi '郭浩'
--5、teacher数据库的teacher表中创建一个INSERT 触发器T_insert,
--当向teacher表中插入数据时,要求学号必须以“1102”开头,否则取消插入操作,
--并提示错误“输入的教师工号错误,请确认后重新录入!”的警告信息。
ALTER TRIGGER T_insert
ON teacher
FOR INSERT
AS
DECLARE @teacher_id char(8)
IF LEFT(@teacher_id,4)!=1102
BEGIN
PRINT '输入的教师工号错误,请确认后重新录入!'
ROLLBACK TRAN
END
INSERT INTO teacher
VALUES
('1102011','04','郭浩','3500','编译原理','33')
INSERT INTO teacher
VALUES
('1111111','04','郭浩','3500','编译原理','33')--一此题待修改!!!!
--6、为“学生选课数据库”数据库中的选课表创建一个名为update_fenshu的UPDATE触发器,
--该触发器的作用是禁止更新选课表中的“分数”字段的内容。
--并演示用UPDATE语句修改“选课”表中第一条记录为分数改为80
--如图:090101 100002 80
--要求显示“不能修改分数”的警告信息。
CREATE TRIGGER update_fenshu
ON xuanke
FOR UPDATE
AS
IF UPDATE(Result)
BEGIN
PRINT '不能修改分数'
ROLLBACK TRAN
END
UPDATE xuanke
SET Result='80'
WHERE Sno=(SELECT TOP 1 Sno
FROM xuanke)
AND Cno=(SELECT TOP 1 Cno
FROM xuanke)
UPDATE xuanke
SET Result='78'
WHERE Sno=(SELECT TOP 1 Sno
FROM xuanke)
AND Cno=(SELECT TOP 1 Cno
FROM xuanke)
--7、为jieyue数据库中的“借书记录”
--表创建一个名为insert_jie的insert触发器,
--该触发器的作用是每当借书表插入一条记录,
--相应的“图书”表应该减少1本该书的库存数量。
--并用insert语句触发事件,截图相应结果。
CREATE TRIGGER insert_jie
ON borrow
FOR INSERT
AS
BEGIN
UPDATE books
SET num=num-1
WHERE BID=(SELECT BID FROM INSERTED)
END
INSERT borrow
VALUES
('0003','bsn001','2020-5-11','2020-6-11')
CREATE TRIGGER insert_jie1
ON borrow
FOR INSERT
AS
DECLARE @bsn VARCHAR(50)
SELECT @bsn=BID
FROM INSERTED
PRINT @bsn
BEGIN
UPDATE books
SET num=num-1
WHERE BID=@bsn
END
INSERT borrow
VALUES
('0003','bsn001','2020-5-11','2020-6-11')
--8、为jieyue数据库中的“还书记录”
--表创建一个名为insert_huan的insert触发器,
--该触发器的作用是每当还书表插入一条记录,
--相应的“图书”表应该增加1本该书的库存数量。
--并用insert语句触发事件,截图相应结果。
CREATE TRIGGER insert_huan
ON [return]
FOR INSERT
AS
BEGIN
UPDATE books
SET num=num+1
WHERE BID=(SELECT BID FROM INSERTED)
END
INSERT [return]
VALUES
('0003','bsn001','2020-6-10')
Disparadores y procedimientos almacenados
Supongo que te gusta
Origin blog.csdn.net/csdcainiao/article/details/106768766
Recomendado
Clasificación