标题:关于触发器的问题
只看楼主
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
结帖率:95.12%
已结贴  问题点数:10 回复次数:4 
关于触发器的问题
求高人帮我解释一下下面这段代码哦,我能看懂的后面都做注释了,红色部分是看不懂的,能给详细解释一下吗?跪谢了


为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


[ 本帖最后由 fyz520 于 2010-7-24 12:29 编辑 ]
搜索更多相关主题的帖子: 触发器 
2010-07-24 02:18
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
得分:0 
带???问号的都是看不懂的,怎么发上去的红色部分才两行,晕
2010-07-24 02:19
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:0 
这是相当基础的东西,稍稍看下相关知识不难明白的!

★★★★★为人民服务★★★★★
2010-07-24 16:59
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
得分:0 
支持ls
lz去了解下:
定义变量.INSERTED,DELETED表,事务 ,RAISERROR用户定义错误信息
其它的都是相当基础的就不说了.

C#超级群 74862681,欢迎大家的到来!
2010-07-24 18:38
dearwolf4128
Rank: 5Rank: 5
来 自:陕西西安
等 级:职业侠客
威 望:6
帖 子:79
专家分:365
注 册:2010-7-2
得分:10 
DECLARE @S_no VARCHAR(4), @S_cno INT     //声明 @S_no ,@S_cno 变量
SELECT @S_no= SNO, @S_cno=CNO            //给变量输值
FROM INSERTED                            //inserted为插入时的系统临时表,具体为插入时的某一行记录
IF (LEFT(@S_no,2)!='97')                 //left()为返回字符串中从左边开始指定个数的字符。词句为ascll码是否等于97  
BEGIN                                    //事务开始
ROLLBACK TRANSACTION                     //事务回滚
RAISERROR('输入的学号:%s不是97级的学生,请确认后重新录入!',16,1, @S_no)           //raiserror为生成错误消息并启动会话的错误处理
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)    //raiserror为生成错误消息并启动会话的错误处理

END
2010-07-26 13:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-313859-1-1.html




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

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