SQL2005 建立学生选课触发器stu_course 对应学生选课不能超过4门

建了学生表 student里面有学号 sc表

下面是测试表关系:

(学生表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
@stuid VARCHAR(50),
@courseid VARCHAR(50),
@stuname VARCHAR(50),
@coursename VARCHAR(50),
@msg VARCHAR(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 行

事务在触发器中结束。批处理已中止。


如有疑问,继续追问。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-06
通过 数据库->你的数据库->表->触发器->右击->新建触发器.
相似回答