有二张表,学生情况表、学生成绩表,二张表的都有主键StudentID,如果改变学生情况表的某个学生的StudentID,则用触发器改变学生成绩表该学生的StudentID,在学生情况表上建立触发器如下:
CREATE TRIGGER UpdateStudentID ON dbo.学生情况表
FOR UPDATE 
AS
if update(StudentID)
begin
update 学生成绩表 set StudentID=学生情况表.StudentID from 学生情况表 where 学生成绩表.StudentID=学生情况表.StudentID 
end但是每次改变学生情况表中一个学生的StudentID,就会影响学生成绩表中所有行,我的学生成绩表有几万个记录,这样是不是影响操作速度,能否每次改变学生情况表中一个学生的StudentID,只影响学生成绩表该学生StudentID,而不是影响到所有的记录

解决方案 »

  1.   

    update 学生成绩表 set StudentID=学生情况表.StudentID from deleted where 学生成绩表.StudentID=deleted.StudentID  
    这样试试
      

  2.   


    update 学生成绩表 set StudentID=inserted.StudentID from inserted,deleted where 学生成绩表.StudentID=deleted.StudentID 
      

  3.   

    update 学生成绩表 set StudentID=i.StudentID from inserted i,deleted d where 学生成绩表.StudentID=d.StudentID 
      

  4.   

    CREATE TRIGGER UpdateStudentID ON dbo.学生情况表
    FOR UPDATE  
    AS
    if update(StudentID)
    begin
    update 学生成绩表 
    set StudentID=inserted.StudentID
    from deleted,inserted
    where deleted.StudentID = 学生成绩表.StudentID
    and deleted.StudentID <>inserted.StudentID
    end
      

  5.   

    update 学生成绩表 set StudentID=学生情况表.StudentID from 学生情况表 
    where 学生成绩表.StudentID=学生情况表.StudentID /*lz这句话其实是不会做任何修改的,
    试想 where 学生成绩表.StudentID=学生情况表.StudentID,
    再 set 学生成绩表.StudentID=学生情况表.StudentID
    不会产生任何影响所以,要么按5楼所说操作,
    要么如4楼所说,但注意4楼只适合于一次更新一条记录的情况
    否则这句and deleted.StudentID <>inserted.StudentID,
    会产生多对多的问题*,如果要解决多对多的问题,
    那么学生情况表必须有一个主键id,
    and deleted.id=inserted.id进行匹配/