CREATETRIGGER T_STUDENTINSERT
ON STUDENT --关于某个表的触发器
AFTERINSERT --在添加学生之后触发该触发器
ASBEGINUPDATE DBO.CLASS SET CLASS_STUDENTCOUNT = CLASS_STUDENTCOUNT +1WHERE CLASS_ID IN (SELECT CLASS_ID FROM INSERTED)
END
对代码的分析:
看到提示语句:你会肿么做嘞!
1.首先分析提示语句:可以看到要创建一个触发器这是毋庸置疑的
CREATE TRIGGER T_STUDENTINSERT
2.其次:创建触发器肯定是基于某个表上的 那么提示语已经告诉我们了 没错是学生表
ON STUDENT
3.接下来是:看在何种情况下要触发该触发器 在添加一个语句 时 改变班级中相应的人数
AFTER INSERT
4.最后要看的就是执行什么语句了:触发以后执行的就是更改相应的班级人数
BEGIN
UPDATE DBO.CLASS SET CLASS_STUDENTCOUNT = CLASS_STUDENTCOUNT +1 WHERE CLASS_ID IN (SELECT CLASS_ID FROM INSERTED)
END
那么这条语句又是什么意思?一起来研究一下:
1).首先时更新数据基于的时班级表中的人数
2).然后就是对数据更新必须的时条件 那就是ID
ID从哪里来的呢?
在添加数据生成的数据中的CALSS_ID 与之匹配
最后让班级人数自增
CREATETRIGGER T_STUDENTUPDATE
ON STUDENT
AFTERUPDATEASBEGINDECLARE @STU_NAME NVARCHAR(50)
DECLARE @CLASS_NAME NVARCHAR(50)
SELECT @STU_NAME = stu_name FROM inserted
SELECT @CLASS_NAME=CLASS_NAME FROM DBO.CLASS WHERE class_id IN (SELECT class_id FROM inserted)
PRINT '警告:'+@STUNAME+'同学已经转到'+@CLASS_NAMEF+'班级,请知晓!'
--'警告:'+@STUNAME+'同学已经转到'+@CLASS_NAMEF+'班级,请知晓!'END
代码分析:
1.首先分析提示语句:可以看到要创建一个触发器这是毋庸置疑的
CREATE TRIGGER T_STUDENTUPDATE
2.其次:创建触发器肯定是基于某个表上的 那么提示语已经告诉我们了 没错是学生表
ON STUDENT
3.接下来是:看在何种情况下要触发该触发器 :实现当修改 时
AFTER UPDATE
4.最后要看的就是执行什么语句了:触发以后执行的 print 出如下信息:‘警告:xx同学已经转到xx班级,请知晓!’
BEGIN
DECLARE @STU_NAME NVARCHAR(50)--定义变量来接受改变的学生姓名
DECLARE @CLASS_NAME NVARCHAR(50) --定义变量来接受改变的班级
SELECT @STU_NAME = stu_name FROM inserted
SELECT @CLASS_NAME=CLASS_NAME FROM DBO.CLASS WHERE class_id IN (SELECT class_id FROM inserted)
PRINT '警告:'+@STUNAME+'同学已经转到'+@CLASS_NAMEF+'班级,请知晓!'
END
BEGIN
DECLARE @NAME NVARCHAR(50)
SELECT @NAME= (CASE WHEN @SCORE <60 THEN ‘不及格’ WHEN @SCORE>=60 AND @SCORE<=70 THEN ‘及格’ WHEN @SCORE>70 AND @SCORE<=80 THEN ‘中等’ WHEN @SCORE>80 AND @SCORE<100 THEN ‘优秀’ WHEN @SCORE = 100 THEN ‘满分’ END)
CREATEVIEW V_GETSTUDENTSCORE
ASSELECT S.stu_name,C.class_name,SC.courseName,SC.score ,DBO.FUN_GETSORERANK(SC.score) AS'等级'FROM CLASS C JOIN STUDENT S ON C.class_id = S.class_id JOIN SCORE SC ON SC.stu_id = S.stu_id