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

解决方案 »

  1.   

    约束1:可以在列上做个约束,没必要弄触发器
    2、3:有外键的话做级联更新和级联删除
    4:这个做了级联的话就可以实现了。
    总体来说,你那些约束没必要做触发器。做了反而影响性能。
    CREATE TRIGGER Update_Student ON Student
         AFTER UPDATE
     AS
         INSERT  INTO GradeChange
                 SELECT  *
                 FROM    INSERTED 
     
      

  2.   

    CREATE TRIGGER Update_Grade ON Student      
    AFTER UPDATE 
    AS     
    INSERT  INTO GradeChange  SELECT  *  FROM    INSERTED 
      

  3.   

    根据我的理解,前三项没必要也不适合在触发器里面实现。非要放到触发器的话就要做4个if/else ,触发器我不喜欢用,所以也不熟,只能帮到这里了,等别人来补充吧
      

  4.   


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

  5.   


    学生选课表:学号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
      

  6.   

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

  7.   

    这作业做的稀里糊涂。
    我使用的教材是《数据库系统概论》(第4版),课本上定义触发器的一般格式为:
    create trigger<触发器名>
       {before|after} <触发事件> on <表名>
       for each {row|statement}
       [when <触发条件>]
       <触发动作体>
      

  8.   

    实验平台是在SQL Server2000上进行。
    学的真郁闷!
    能不能给我推荐几本书看看,谢谢啦!
      

  9.   

    怎么还是第四版啊?我07年的时候用的就是第四版,这本书只有sql iso的定义,SQLServer不是全部都符合iso的。
      

  10.   

    换2008,推荐《SQLServer 2005 技术内幕》,你的水平先看第一本吧
      

  11.   

    免费的http://download.csdn.net/detail/dba_huangzj/4815693