实验十三
This commit is contained in:
@@ -34,6 +34,8 @@
|
|||||||
|
|
||||||
- [实验十二](实验十二.sql)
|
- [实验十二](实验十二.sql)
|
||||||
|
|
||||||
|
- [实验十三](实验十三.sql)
|
||||||
|
|
||||||
### 课后作业📖
|
### 课后作业📖
|
||||||
|
|
||||||
[课后作业](课后作业/)
|
[课后作业](课后作业/)
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
USE 学生管理;
|
||||||
|
-- (1)为选课表分别建立插入和更新触发器,如果当前学生累计不及格门数达到5则给出警示信息。
|
||||||
|
-- 插入触发器
|
||||||
|
CREATE TRIGGER 插入警示
|
||||||
|
ON 选课表
|
||||||
|
AFTER INSERT
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
CREATE TABLE #警示信息 (
|
||||||
|
学号 VARCHAR(8),
|
||||||
|
不及格门数 INT
|
||||||
|
);
|
||||||
|
INSERT INTO #警示信息(学号, 不及格门数)
|
||||||
|
SELECT
|
||||||
|
i.学号,
|
||||||
|
COUNT(*) AS 不及格门数
|
||||||
|
FROM
|
||||||
|
选课表 AS q
|
||||||
|
INNER JOIN INSERTED AS i ON q.学号 = i.学号
|
||||||
|
WHERE
|
||||||
|
q.成绩 < 60
|
||||||
|
GROUP BY
|
||||||
|
i.学号
|
||||||
|
HAVING
|
||||||
|
COUNT(*) >= 5;
|
||||||
|
IF EXISTS (SELECT 1 FROM #警示信息)
|
||||||
|
BEGIN
|
||||||
|
DECLARE @警示文本 NVARCHAR(MAX);
|
||||||
|
SELECT @警示文本 = STRING_AGG(
|
||||||
|
CONCAT('警示: 学号 ', 学号, ' 的累计不及格门数已达到 ', 不及格门数, ' 门!'),
|
||||||
|
CHAR(13) + CHAR(10)
|
||||||
|
)
|
||||||
|
FROM #警示信息;
|
||||||
|
RAISERROR (@警示文本, 16, 1);
|
||||||
|
ROLLBACK TRANSACTION;
|
||||||
|
END
|
||||||
|
DROP TABLE #警示信息;
|
||||||
|
END;
|
||||||
|
-- 更新触发器
|
||||||
|
CREATE TRIGGER 更新警示
|
||||||
|
ON 选课表
|
||||||
|
AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
CREATE TABLE #警示信息 (
|
||||||
|
学号 VARCHAR(8),
|
||||||
|
不及格门数 INT
|
||||||
|
);
|
||||||
|
INSERT INTO #警示信息(学号, 不及格门数)
|
||||||
|
SELECT
|
||||||
|
i.学号,
|
||||||
|
COUNT(*) AS 不及格门数
|
||||||
|
FROM
|
||||||
|
选课表 AS q
|
||||||
|
INNER JOIN INSERTED AS i ON q.学号 = i.学号
|
||||||
|
WHERE
|
||||||
|
q.成绩 < 60
|
||||||
|
GROUP BY
|
||||||
|
i.学号
|
||||||
|
HAVING
|
||||||
|
COUNT(*) >= 5;
|
||||||
|
IF EXISTS (SELECT 1 FROM #警示信息)
|
||||||
|
BEGIN
|
||||||
|
DECLARE @警示文本 NVARCHAR(MAX);
|
||||||
|
|
||||||
|
SELECT @警示文本 = STRING_AGG(
|
||||||
|
CONCAT('警示: 学号 ', 学号, ' 的累计不及格门数已达到 ', 不及格门数, ' 门!'),
|
||||||
|
CHAR(13) + CHAR(10)
|
||||||
|
)
|
||||||
|
FROM #警示信息;
|
||||||
|
RAISERROR (@警示文本, 16, 1);
|
||||||
|
ROLLBACK TRANSACTION;
|
||||||
|
END
|
||||||
|
|
||||||
|
DROP TABLE #警示信息;
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- (2)为课程表分别建立插入和更新触发器来建立约束规则:“专业基础”课的教师必须为“教授”或“副教授”,如果不满足约束则拒绝操作,并给出错误信息。
|
||||||
|
-- 插入触发器
|
||||||
|
CREATE TRIGGER 教师职称警告_插入 ON 课程表
|
||||||
|
AFTER INSERT
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT *
|
||||||
|
FROM INSERTED
|
||||||
|
JOIN 教师表 ON INSERTED.责任教师=教师表.教师编号
|
||||||
|
WHERE (教师表.职称 != '教授' AND 教师表.职称 != '副教授')AND INSERTED.课程性质='专业基础'
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('教授专业基础课的教师必须为教授或副教授',16,1);
|
||||||
|
ROLLBACK TRANSACTION;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
-- 更新触发器
|
||||||
|
CREATE TRIGGER 教师职称警告_更新 ON 课程表
|
||||||
|
AFTER UPDATE
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT *
|
||||||
|
FROM INSERTED
|
||||||
|
JOIN 教师表 ON INSERTED.责任教师=教师表.教师编号
|
||||||
|
WHERE (教师表.职称 != '教授' AND 教师表.职称 != '副教授')AND INSERTED.课程性质='专业基础'
|
||||||
|
)
|
||||||
|
BEGIN
|
||||||
|
RAISERROR ('教授专业基础课的教师必须为教授或副教授',16,1);
|
||||||
|
ROLLBACK TRANSACTION;
|
||||||
|
END;
|
||||||
|
END;
|
||||||
Reference in New Issue
Block a user