SQL2005 建立学生选课触发器stu_course 对应学生选课不能超过4门
发布网友
发布时间:2022-11-02 09:47
我来回答
共2个回答
热心网友
时间:2023-10-23 06:30
下面是测试表关系:
(学生表student,课程表course,学生选课表sc)
为学生表和课程表插入一些测试数据。
为sc表创建触发器。
IF OBJECT_ID ('stu_course', 'TR') IS NOT NULL
DROP TRIGGER stu_course
GO
CREATE TRIGGER stu_course
ON sc
FOR INSERT
AS
DECLARE
@stuidVARCHAR(50),
@courseidVARCHAR(50),
@stunameVARCHAR(50),
@coursenameVARCHAR(50),
@msgVARCHAR(100)
SELECT @stuid=STUDENTID,@courseid=COURSEID FROM Inserted
IF EXISTS(SELECT 1 FROM sc WHERE STUDENTID=@stuid AND COURSEID=@courseid GROUP BY STUDENTID,COURSEID HAVING COUNT(1)=2)
BEGIN
SELECT @stuname=NAME FROM student WHERE ID=@stuid
SELECT @coursename=NAME FROM course WHERE ID=@courseid
SET @msg='学生【'+@stuname+'('+@stuid+')】已选择课程【'+@coursename+'('+@courseid+')】。'
--SELECT @msg
RAISERROR(@msg,10,1)
ROLLBACK TRAN
RETURN
END
IF EXISTS(SELECT 1 FROM sc WHERE STUDENTID=@stuid GROUP BY STUDENTID HAVING COUNT(1)>4)
BEGIN
SELECT @stuname=NAME FROM student WHERE ID=@stuid
SELECT @coursename=NAME FROM course WHERE ID=@courseid
SET @msg='学生【'+@stuname+'('+@stuid+')】的选课已满4门,不能再选择。'
--SELECT @msg
RAISERROR(@msg,10,1)
ROLLBACK TRAN
RETURN
END
GO
给sc表插入数据测试。
INSERT INTO sc( STUDENTID, COURSEID )VALUES ( '01', '01' )
INSERT INTO sc( STUDENTID, COURSEID )VALUES ( '01', '01' )
INSERT INTO sc( STUDENTID, COURSEID )VALUES ( '01', '02' )
INSERT INTO sc( STUDENTID, COURSEID )VALUES ( '01', '03' )
INSERT INTO sc( STUDENTID, COURSEID )VALUES ( '01', '04' )
INSERT INTO sc( STUDENTID, COURSEID )VALUES ( '01', '05' )
执行第二句时提示:
“
学生【小明(01)】已选择课程【数学(01)】。
消息 3609,级别 16,状态 1,第 1 行
事务在触发器中结束。批处理已中止。
”
继续执行3,4,5句。
执行第6句时提示:
“
学生【小明(01)】的选课已满4门,不能再选择。
消息 3609,级别 16,状态 1,第 1 行
事务在触发器中结束。批处理已中止。
”
如有疑问,继续追问。
热心网友
时间:2023-10-23 06:31
通过 数据库->你的数据库->表->触发器->右击->新建触发器.