下面是测试表关系:
(学生表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 行
事务在触发器中结束。批处理已中止。
”
如有疑问,继续追问。