create trigger sname_ssex on student
INSTEAD OF insert,update
--drop trigger sname_ssex
as
if exists (select 1 from student a,inserted b where a.sname=b.sname and a.ssex=b.ssex)
begin
  raiserror('违背FD:sname ->ssex!',16,1)
  rollback transaction
end

解决方案 »

  1.   

    if exists (select * from inserted a,inserted b where a.sname=b.sname and a.ssex=b.ssex)---同一个表当然是相同了
      

  2.   

    ---改为
    if exists (select * from student a,inserted b where a.sname=b.sname and a.ssex=b.ssex)
    begin
      raiserror('违背FD:sname ->ssex!',16,1)
      rollback transaction
    end而且出发器每语句出发一次
      

  3.   

    if exists (select name from sysobjects where name = 'sname_ssex' and type = 'TR')
    drop trigger sname_ssex
    go
    Create trigger sname_ssex on student
    for insert,update
    as
    if exists (select * from inserted a,student b      --触发器改为
               where a.sname=b.sname and a.ssex<>b.ssex)  
    begin
      raiserror('违背FD:sname ->ssex!',16,1)
      rollback transaction
    end
      

  4.   

    改为:alter trigger sname_ssex on student
    for insert ,update
    as
     declare @sname varchar(20),
             @ssex  varchar(10),
             @sno   varchar(20)      
      select @sno=sno, @sname=sname,@ssex=ssex from insertedif exists (select * from student 
               where sname=@sname and ssex<>@ssex and sno<>@sno)
    begin
      raiserror('违背FD:sname ->ssex!',16,1)
      rollback transaction
    end
    go
      

  5.   

    if exists (select * from student 
               where sname=@sname and ssex<>@ssex and sno<>@sno)
      

  6.   

    create trigger sname_ssex on student
    for insert,update
    as
    if exists(
    select a.sname from student a,inserted i
    where a.sname=i.sname
    group by a.sname
    having count(distinct a.ssex)>1)
    begin
      raiserror('违背FD:sname ->ssex!',16,1)
      rollback transaction
    end
      

  7.   

    ---改为
    if exists (select 1 from student a,inserted b where a.sname=b.sname and a.ssex=b.ssex)
    begin
      raiserror('违背FD:sname ->ssex!',16,1)
      rollback transaction
    end而且出发器每语句出发一次