SQLserver完成以下问题已知有选课表sc和课程表course,其中课程表中有选课人数字段(xkrs),请编写三个触发器,分别实现当向sc表插入记录时,把课程表中对应课程的选课人数字段加1;当从sc表删除一条记录时,把课程表中对应课程的选课人数字段减1;当修改sc表中一条记录的课号(cno)时,把课程表中对应课程的选课人数字段加1,对应课程的选课人数字段加1。
时间: 2023-06-24 13:02:57 浏览: 160
触发器1:当向sc表插入记录时,把课程表中对应课程的选课人数字段加1
```
CREATE TRIGGER trg_insert_sc
ON sc
AFTER INSERT
AS
BEGIN
UPDATE course
SET xkrs = xkrs + 1
FROM inserted i
WHERE course.cno = i.cno
END
```
触发器2:当从sc表删除一条记录时,把课程表中对应课程的选课人数字段减1
```
CREATE TRIGGER trg_delete_sc
ON sc
AFTER DELETE
AS
BEGIN
UPDATE course
SET xkrs = xkrs - 1
FROM deleted d
WHERE course.cno = d.cno
END
```
触发器3:当修改sc表中一条记录的课号(cno)时,把课程表中对应课程的选课人数字段加1,对应课程的选课人数字段加1
```
CREATE TRIGGER trg_update_sc
ON sc
AFTER UPDATE
AS
BEGIN
-- 修改前的课号
DECLARE @old_cno CHAR(10)
SELECT @old_cno = cno FROM deleted
-- 修改后的课号
DECLARE @new_cno CHAR(10)
SELECT @new_cno = cno FROM inserted
-- 修改前的课程选课人数
DECLARE @old_xkrs INT
SELECT @old_xkrs = xkrs FROM course WHERE cno = @old_cno
-- 修改后的课程选课人数
DECLARE @new_xkrs INT
SELECT @new_xkrs = xkrs FROM course WHERE cno = @new_cno
-- 修改前课程选课人数减1
UPDATE course
SET xkrs = @old_xkrs - 1
WHERE cno = @old_cno
-- 修改后课程选课人数加1
UPDATE course
SET xkrs = @new_xkrs + 1
WHERE cno = @new_cno
END
```
以上三个触发器分别实现了向sc表插入记录时,把课程表中对应课程的选课人数字段加1;从sc表删除一条记录时,把课程表中对应课程的选课人数字段减1;修改sc表中一条记录的课号(cno)时,把课程表中对应课程的选课人数字段加1,对应课程的选课人数字段加1的功能。
阅读全文