A表:odmaters,B表:projects,C表:sctoerpxq
A表字段:odcode,materid,unitct
B表字段:sdate,res,tel3
C表字段:projectid, materid, unitct, sdate, res,version
对应关系 :odcode=projectid materid=materid
unitct=unitct sdate=sdate res=res
tel3 = version
在A表中建立Update触发器 使A表发生数据的变化 C表相应的改变
A表odcode字段与B表的projectid指端相关联
A表字段:odcode,materid,unitct
B表字段:sdate,res,tel3
C表字段:projectid, materid, unitct, sdate, res,version
对应关系 :odcode=projectid materid=materid
unitct=unitct sdate=sdate res=res
tel3 = version
在A表中建立Update触发器 使A表发生数据的变化 C表相应的改变
A表odcode字段与B表的projectid指端相关联
FOR UPDATE
AS
BEGIN
UPDATE sctoerpxq
SET materid = t.materid ,
unitct = t.unitct
FROM ( SELECT *
FROM Inserted
) t
WHERE t.odcode = projectid
END
GO
A表变化更新C表;那就是C表中原来就有数据;A表和B表没有关联吧
as
insert into sctoerpxq(projectid, materid, unitct, sdate, res,version)
select inserted.odcode, inserted.materid, inserted.unitct, projects.sdate, projects.res,projects.tel3
from inserted, projects
where inserted.odcode=projects.projectid这是我写的insert触发器
只要A表出现一点点变化 我就删除C表所有数据 然后运行
insert into sctoerpxq(projectid, materid, unitct, sdate, res,version)
select projects.projectid,odmaters.materid,odmaters.unitct,projects.sdate,projects.res ,projects.tel3
from dbo.projects,dbo.odmaters
where projects.projectid=odmaters.odcode
这个语句
FOR UPDATE
AS
BEGIN
DELETE FROM sctoerpxq INSERT INTO sctoerpxq
( projectid ,
materid ,
unitct ,
sdate ,
res ,
version
)
SELECT projects.projectid ,
odmaters.materid ,
odmaters.unitct ,
projects.sdate ,
projects.res ,
projects.tel3
FROM dbo.projects ,
dbo.odmaters
WHERE projects.projectid = odmaters.odcode
END
GO
但是这样写就是A表一变就把所有的C表都删除了,然后重新插入;这样效率不高,数据多了会有问题,可以加一个ID判断,只删除变了ID的C表数据,插入对应Id的数据到C表
CREATE TRIGGER dbo.test_tri ON [dbo].odmaters
FOR UPDATE
AS
BEGIN
DELETE FROM sctoerpxq
WHERE projectid IN ( SELECT *
FROM Inserted ) INSERT INTO sctoerpxq
( projectid ,
materid ,
unitct ,
sdate ,
res ,
version
)
SELECT projects.projectid ,
odmaters.materid ,
odmaters.unitct ,
projects.sdate ,
projects.res ,
projects.tel3
FROM dbo.projects ,
dbo.odmaters
WHERE projects.projectid = odmaters.odcode
AND projectid IN ( SELECT *
FROM Inserted )
END
GO
CREATE TRIGGER dbo.test_tri ON [dbo].odmaters
FOR UPDATE
AS
BEGIN
DELETE FROM sctoerpxq
WHERE projectid IN ( SELECT projectid
FROM Inserted ) INSERT INTO sctoerpxq
( projectid ,
materid ,
unitct ,
sdate ,
res ,
version
)
SELECT projects.projectid ,
odmaters.materid ,
odmaters.unitct ,
projects.sdate ,
projects.res ,
projects.tel3
FROM dbo.projects ,
dbo.odmaters
WHERE projects.projectid = odmaters.odcode
AND projectid IN ( SELECT projectid
FROM Inserted )
END
GO