有二张表,学生情况表、学生成绩表,二张表的都有主键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,而不是影响到所有的记录
CREATE TRIGGER UpdateStudentID ON dbo.学生情况表
FOR UPDATE
AS
if update(StudentID)
begin
update 学生成绩表 set StudentID=学生情况表.StudentID from 学生情况表 where 学生成绩表.StudentID=学生情况表.StudentID
end但是每次改变学生情况表中一个学生的StudentID,就会影响学生成绩表中所有行,我的学生成绩表有几万个记录,这样是不是影响操作速度,能否每次改变学生情况表中一个学生的StudentID,只影响学生成绩表该学生StudentID,而不是影响到所有的记录
这样试试
update 学生成绩表 set StudentID=inserted.StudentID from inserted,deleted where 学生成绩表.StudentID=deleted.StudentID
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
where 学生成绩表.StudentID=学生情况表.StudentID /*lz这句话其实是不会做任何修改的,
试想 where 学生成绩表.StudentID=学生情况表.StudentID,
再 set 学生成绩表.StudentID=学生情况表.StudentID
不会产生任何影响所以,要么按5楼所说操作,
要么如4楼所说,但注意4楼只适合于一次更新一条记录的情况
否则这句and deleted.StudentID <>inserted.StudentID,
会产生多对多的问题*,如果要解决多对多的问题,
那么学生情况表必须有一个主键id,
and deleted.id=inserted.id进行匹配/