如下触发器:CREATE TRIGGER upt_DDATE ON TB1
for INSERT,UPDATE
ASIF EXISTS(select 1 from INSERTED where AA is not null)
BEGIN update INSERTED
set INSERTED.DDATE=TB2.maxdate
from INSERTED,TB2
where INSERTED.ccode=TB2.ccode END 提示错误: 不能更新逻辑表 INSERTED 和 DELETED。
for INSERT,UPDATE
ASIF EXISTS(select 1 from INSERTED where AA is not null)
BEGIN update INSERTED
set INSERTED.DDATE=TB2.maxdate
from INSERTED,TB2
where INSERTED.ccode=TB2.ccode END 提示错误: 不能更新逻辑表 INSERTED 和 DELETED。
for INSERT,UPDATE
AS IF EXISTS(select 1 from INSERTED where AA is not null)
BEGIN update TB1
set DDATE=TB2.maxdate
from INSERTED I,TB2
where I.ccode=TB2.ccode END
说说你的需求
for INSERT,UPDATE
AS
update TB1
set TB1.DDATE=TB2.maxdate
from INSERTED,TB2
where INSERTED.ccode=TB2.ccode
and TB1.ccode=INSERTED.ccode
AND inserted.AA is not nullgo理解错了,改为
if not update(DDATE)
判断防止无限触发
http://topic.csdn.net/u/20081005/11/57061a18-c234-40ee-ba4b-1f4c3bc7f09a.html?48776看看这个就知道海爷有多厉害。
子表 TB2 (ID,材料编码 CODE,领用人 CPERSON,...,最近领用日期 MAXDATE)
(主表子表ID联接)要求在录入材料领用单后,保存自动根据以前记录填写(子表 TB2 最近领用日期 MAXDATE)字段
select 1 from INSERTED where AA is not null需改成select 1 * from INSERTED where AA is not null少了字段。
CREATE TRIGGER upt_DDATE ON TB2
after INSERT
AS update TB2
set MAXDATE=max(b.MAXDATE)
from INSERTED i,TB2 b
where i.code=b.code
AND i.CPERSON=b.CPERSON go也可以在插入时就指定maxdate
insert tb2 select @col1,@col2,max(maxdate) from tb2 where code= ... and CPERSON =...
set TB1.DDATE=TB2.maxdate
from INSERTED,TB2
where INSERTED.ccode=TB2.ccode
and TB1.ccode=INSERTED.ccode
AND inserted.AA is not null
CREATE TRIGGER upt_DDATE ON TB1
after INSERT
AS update TB1
set ddate=max(b.MAXDATE)
from INSERTED i,TB2 b,tb1 a
where i.code=b.code
AND i.CPERSON=b.CPERSON
and a.code=b.code AND a.CPERSON=b.CPERSON go
日期最好还是取主表的(单据日期 DDATE)
CODE CPERSON MAXDATE
0101 A 2009-09-01
0101 B 2009-09-03
0102 A 2009-09-08TABLEA
ID CODE CPERSON QTY --DDATE (触发器更新)00001 0101 A 10 --2009-09-0800002 0101 B 20 --2009-09-01VIEW1 (最近日期记录视图)
CODE CPERSON MAXDATE
0101 A 2009-09-10
0101 B 2009-09-13TABLEAID CODE CPERSON QTY --DDATE (触发器更新)00003 0101 A 30 --2009-09-1000004 0101 B 20 --2009-09-13
能够做到只触发更新当前的插入或更新记录吗?结果如下:
TABLEA ID CODE CPERSON QTY --DDATE (触发器更新)
00001 0101 A 10 --2009-09-08
00002 0101 B 20 --2009-09-01
00003 0101 A 30 --2009-09-10
00004 0101 B 20 --2009-09-13
CODE CPERSON MAXDATE
0101 A 2009-09-01
0101 B 2009-09-03
0102 A 2009-09-08 TABLEA
ID CODE CPERSON QTY --DDATE (触发器更新) 00001 0101 A 10 --2009-09-08 00002 0101 B 20 --2009-09-01 VIEW1 (最近日期记录视图)
CODE CPERSON MAXDATE
0101 A 2009-09-10
0101 B 2009-09-13 TABLEA ID CODE CPERSON QTY --DDATE (触发器更新) 00003 0101 A 30 --2009-09-10 00004 0101 B 20 --2009-09-13
能够做到只触发更新当前的插入或更新记录吗?结果如下:
TABLEA ID CODE CPERSON QTY --DDATE (触发器更新)
00001 0101 A 10 --2009-09-08
00002 0101 B 20 --2009-09-01
00003 0101 A 30 --2009-09-10
00004 0101 B 20 --2009-09-13