| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 387 人关注过本帖
标题:关于触发器的问题
只看楼主 加入收藏
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
结帖率:95.12%
收藏
已结贴  问题点数:5 回复次数:1 
关于触发器的问题

求高人帮我解释一下下面这段代码哦,我能看懂的后面都做注释了,红色部分是看不懂的,能给详细解释一下吗?跪谢了


为STUDENT表创建触发器S_insert,当向STUDENT表中插入数据时,要求学号必须以“97”开头,且课程号CNO必须在COURSE表中,否则取消插入操作,以下是代码:


CREATE TRIGGER S_insert  //创建触发器S_insert
ON STUDENT               //与触发器相关联的表的名字student
FOR INSERT AS            //当执行insert操作时将激发触发器
DECLARE @S_no VARCHAR(4), @S_cno INT     //???  
SELECT @S_no= SNO, @S_cno=CNO            //???  
FROM INSERTED                            //???
IF (LEFT(@S_no,2)!='97')                 //???   
BEGIN                                    //???
ROLLBACK TRANSACTION                     //???
RAISERROR('输入的学号:%s不是97级的学生,请确认后重新录入!',16,1, @S_no)           //???
END  
IF(@S_cno NOT IN (SELECT CNO FROM COURSE))                                          //???
BEGIN                                                                               //???
ROLLBACK TRANSACTION                                                                //???
RAISERROR('输入的课程号:%d在COURSE表中不存在,请确认后重新录入!',16,1, @S_cno)    //???
END

搜索更多相关主题的帖子: 触发器 
2010-07-24 12:31
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:5 
CREATE TRIGGER S_insert  //创建触发器S_insert
ON STUDENT               //与触发器相关联的表的名字student
FOR INSERT AS            //当执行insert操作时将激发触发器
DECLARE @S_no VARCHAR(4), @S_cno INT     //定义变量,一个是@S_no是VARCHAR型的,另一个是@S_cno是整形的
SELECT @S_no= SNO, @S_cno=CNO            //查询SNO和CNO字段,并分别将值赋值给两个变量
FROM INSERTED                            //从INSERTED表
IF (LEFT(@S_no,2)!='97')                 //如果@S_no变量的值的左边起前两位不是“97”(可能这句我解释的有点出入)   
BEGIN                                    //开始执行
ROLLBACK TRANSACTION                     //回滚执行操作
RAISERROR('输入的学号:%s不是97级的学生,请确认后重新录入!',16,1, @S_no) //抛出错误信息,%s应该会被自动替换成变量@S_no的值
END  
IF(@S_cno NOT IN (SELECT CNO FROM COURSE)) //如果@S_cno的值不再SELECT CNO FROM COURSE的结果集中也会抛出错误信息
BEGIN                                                                               //???
ROLLBACK TRANSACTION                                                                //???
RAISERROR('输入的课程号:%d在COURSE表中不存在,请确认后重新录入!',16,1, @S_cno)    //???
END

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-07-24 14:36
快速回复:关于触发器的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.086608 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved