对于关系:运动员(运动员编号,运动员姓名,运动员性别,所属系名)
项目(项目编号,项目名称,项目比赛地点)
成绩(运动员编号,项目编号,积分)我想写一个触发器,实现:当在"运动员"表中添加"运动员编号"和在"项目"表中添加"项目编号"的数据时,自动在"成绩"表中加入这些数据.我写了,总是出现约束错误,怎么解决?

解决方案 »

  1.   

    create table 运动员
    (
       运动员编号 varchar(3) NOT NULL PRIMARY KEY NONCLUSTERED ,
       运动员姓名 varchar(10),
       运动员性别 bit ,
       所属系名 varchar(10)
    )
    create table 项目
    (
       项目编号 varchar(3) NOT NULL PRIMARY KEY NONCLUSTERED,
       项目名称 varchar(10),
       项目比赛地点 varchar(10)
    )
    create table 成绩
    (
        运动员编号 varchar(3) FOREIGN KEY REFERENCES 运动员,
        项目编号 varchar(3) FOREIGN KEY REFERENCES 项目,
        积分 int
    )
    CREATE TRIGGER Insert_Y on 运动员
    AFTER Insert
    as
        insert 成绩 select A.运动员编号 as 运动员编号,H.项目编号 as 项目编号,0 as 积分 from inserted A,项目 H
    CREATE TRIGGER Insert_H on 项目
    AFTER Insert
    as
        insert 成绩 select Y.运动员编号 as 运动员编号,A.项目编号 as 项目编号,0 as 积分 from inserted A,运动员 Yinsert 运动员 select '001','SC',1,'自然系'
    insert 运动员 select '002','KKK',1,'超人系'insert 项目 select '001','铁人','任意'select * from 成绩
      

  2.   

    create trigger tr_运动员_insert
    on 运动员
    for insert
    asinsert 成绩(运动员编号,项目编号,积分)
    select distinct i.运动员编号,a.项目编号,0
    from inserted i,项目 a
    where not exists (                         
    select 1 from 成绩 where 运动员编号=i.运动员编号 and 项目编号=a.项目编号)gocreate trigger tr_项目_insert
    on 项目
    for insert
    asinsert 成绩(运动员编号,项目编号,积分)
    select distinct a.运动员编号,i.项目编号,0
    from inserted i,运动员 a
    where not exists (                         
    select 1 from 成绩 where 运动员编号=a.运动员编号 and 项目编号=i.项目编号)go--distinct  和条件本来都是多余,防止你的数据有问题而加