首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于SQL触发器创建的有关问题

2012-12-22 
关于SQL触发器创建的问题学生选课表:学号SNO、课程号CNO、课程成绩Grade.--约束:--1.课程成绩介于0至100之间

关于SQL触发器创建的问题
学生选课表:学号SNO、课程号CNO、课程成绩Grade.
--约束:
--1.课程成绩介于0至100之间
--2.修改/删除某个学生时,同时修改/删除该学生对应选课信息
--3.修改某门课程时,同时修改该门课程的对应选课信息;
--4.删除某门课程时,如果已有学生选修该门课程,则不能执行该删除操作;
创建一个触发器,当修改学生课程成绩时,自动将相关信息写入GradeChange表。
[最优解释]


学生选课表:学号SNO、课程号CNO、课程成绩Grade.
--约束:
--1.课程成绩介于0至100之间(检查约束就能搞定)
--2.修改/删除某个学生时,同时修改/删除该学生对应选课信息(级联删除  更新就可以了)
--3.修改某门课程时,同时修改该门课程的对应选课信息;(级联更新)
--4.删除某门课程时,如果已有学生选修该门课程,则不能执行该删除操作;(把课程表的课程号设为主键  选课表的课程号设为外间  利用外键确保数据的引用完整性即可)
至于触发器  我想自己动动脑子就能解决吧  有什么不懂得再来问  不帮学生做题

--创建学生信息表
if OBJECT_ID('StuInfo') is not null
drop table StuInfo
go
create table StuInfo
(
StuId varchar(5) primary key,
StuName nvarchar(10),
StuSex nvarchar(1) check(StuSex in('男','女')),
StuAge smallint,
Tel varchar(11)
)
go
--创建课程表
if OBJECT_ID('CouInfo') is not null
drop table CouInfo
go
create table CouInfo
(
CouId varchar(5) primary key,
CouName nvarchar(20),
CouHours decimal(4,1)
)
go
--学生选课表:
if OBJECT_ID('CouChose') is not null
drop table CouChose
go
create table CouChose
(
Id int identity(1,1),
StuId varchar(5) 
foreign key references StuInfo(StuId) on delete cascade on update cascade,
CouId varchar(5) foreign key references CouInfo(CouId) on update cascade,
CouScoer int check(CouScoer between 0 and 100)

)
go

--创建触发器
if OBJECT_ID('tri_test') is not null
drop trigger tri_test
go
create trigger tri_test on CouChose
for update
as
     insert GradeChange select  *  from    INSERTED 
go

[其他解释]
约束1:可以在列上做个约束,没必要弄触发器
2、3:有外键的话做级联更新和级联删除
4:这个做了级联的话就可以实现了。
总体来说,你那些约束没必要做触发器。做了反而影响性能。


CREATE TRIGGER Update_Student ON Student
     AFTER UPDATE
 AS
     INSERT  INTO GradeChange
             SELECT  *
             FROM    INSERTED 
 
[其他解释]
CREATE TRIGGER Update_Grade ON Student      
AFTER UPDATE 
AS     
INSERT  INTO GradeChange  SELECT  *  FROM    INSERTED
 
[其他解释]
如果按你发的题目,我更容易理解成前四个是在建表或建表后建约束,最后才是写个触发器
[其他解释]

学生选课表:学号SNO、课程号CNO、课程成绩Grade.
--约束:
--1.课程成绩介于0至100之间(检查约束就能搞定)
--2.修改/删除某个学生时,同时修改/删除该学生对应选课信息(级联删除  更新就可以了)
--3.修改某门课程时,同时修改该门课程的对应选课信息;(级联更新)
--4.删除某门课程时,如果已有学生选修该门课程,则不能执行该删除操作;(把课程表的课程号设为主键  


选课表的课程号设为外间  利用外键确保数据的引用完整性即可)
至于触发器  我想自己动动脑子就能解决吧  有什么不懂得再来问  不帮学生做题



[其他解释]
引用:
引用:
如果按你发的题目,我更容易理解成前四个是在建表或建表后建约束,最后才是写个触发器 
题目信息就这么多,建完表后怎么建约束,你写出来,我参考一下

1.ADD CONSTRAINT chk_Person CHECK (成绩>=0 AND 成绩<=100)(新建表时建更方便)
2`3都可以用级联!在论坛搜搜自己基本可以解决!
4 如果一定要写触发器,就用一楼的吧!

[其他解释]
实验平台是在SQL Server2000上进行。
学的真郁闷!
能不能给我推荐几本书看看,谢谢啦!
[其他解释]
statement}
   [when <触发条件>]
   <触发动作体>
[其他解释]
引用:
引用:SQL code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657学生选课表:学号SNO、课程号CNO、课程成绩Grade.--约束:--1.课程成绩介于0至100之间(……
怎么还是第四版啊?我07年的时候用的就是第四版,这本书只有sql iso的定义,SQLServer不是全部都符合iso的。
[其他解释]
引用:
约束1:可以在列上做个约束,没必要弄触发器
2、3:有外键的话做级联更新和级联删除
4:这个做了级联的话就可以实现了。
总体来说,你那些约束没必要做触发器。做了反而影响性能。


SQL code?123456CREATE TRIGGER Update_Student ON Student     AFTER UPDATE AS     INSERT  INT……
题目要求这么做啊,不符合要求拿不到分数啊能不能写个符合要求的啊,最好旁边弄个解释。我是新手,刚学,看的不是太明白
[其他解释]
引用:
SQL code?1234CREATE TRIGGER Update_Grade ON Student      AFTER UPDATE AS     INSERT  INTO GradeChange  SELECT  *  FROM    INSERTED
先谢谢啦!跟楼上的一样哈,语句格式最好规范一点,缩进得当,这样的读起来更容易理解。我是新手,不当之处还望见谅
[其他解释]
你那4个约束都要在一个触发器里面全部实现?
[其他解释]
引用:
你那4个约束都要在一个触发器里面全部实现?
应该是吧。题目就这么出的,我也不太清楚出题人什么意思
[其他解释]
根据我的理解,前三项没必要也不适合在触发器里面实现。非要放到触发器的话就要做4个if/else ,触发器我不喜欢用,所以也不熟,只能帮到这里了,等别人来补充吧
[其他解释]
等别人来补充吧
[其他解释]
引用:
根据我的理解,前三项没必要也不适合在触发器里面实现。非要放到触发器的话就要做4个if/else ,触发器我不喜欢用,所以也不熟,只能帮到这里了,等别人来补充吧
 谢谢!
[其他解释]
引用:
如果按你发的题目,我更容易理解成前四个是在建表或建表后建约束,最后才是写个触发器
 
题目信息就这么多,建完表后怎么建约束,你写出来,我参考一下
[其他解释]
楼上回复的好详细
[其他解释]
引用:
SQL code?1234567891011学生选课表:学号SNO、课程号CNO、课程成绩Grade.--约束:--1.课程成绩介于0至100之间(检查约束就能搞定)--2.修改/删除某个学生时,同时修改/删除该学生对应选课信息(级联删除  更新就可以了)--3.修改某门课程时,同时修改该门课程的对应选课信息;(级联更新)--4.删除某门课程时,如果已有学生选修该门课程,……


[其他解释]
after} <触发事件> on <表名>
   for each {row
[其他解释]
引用:
SQL code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657学生选课表:学号SNO、课程号CNO、课程成绩Grade.--约束:--1.课程成绩介于0至100之间(检查约束就能搞定)--2.修改/删除某个学……

这作业做的稀里糊涂。
我使用的教材是《数据库系统概论》(第4版),课本上定义触发器的一般格式为:
create trigger<触发器名>
   {before
[其他解释]
引用:
实验平台是在SQL Server2000上进行。
学的真郁闷!
能不能给我推荐几本书看看,谢谢啦!
换2008,推荐《SQLServer 2005 技术内幕》,你的水平先看第一本吧

热点排行
Bad Request.