触发器问题 (金蝶系统)
xialk 2008-03-15 10:15:55 seorder表: FinterID(订单流水号) FcustID(客户代码)
seorderentry表: FinterID(订单流水号) FitemID(产品编码) Fmapnumber(客户料号)
icitemmapping表:FitemID(产品编码) FcompanyID(客户代码) Fmapnumber(客户料号)
环境:
1. 在销售订单中自定义一个手工输入的字段【对应编码】(Fentryselfs0164)
2. 在销售订单资料录入时,自动带出【客户料号】(Fmapnumber)
3. 如果带出的【客户料号】与实际订单(原始单据)不相符,在【对应编码】中输入实际订单中的【客户料号】
触发器要实现的功能:
1. 更新销售订单单体(SEOderentry)的【客户料号】(Fmapnumber)为实际输入在【对应编码】(Fentryselfs0164)中的资料
2. 判断物料对应表(ICItemmapping)中是否存在此产品对应的客户料号,如果没有,则插入新的记录;如果有,则更新Fmapnumber字段资料为新输入的【对应编码】。
CREATE TRIGGER [SEOrderEntry_u ] ON [dbo].[SEOrderEntry]
FOR INSERT, UPDATE
AS
if update(Fentryselfs0164)
begin
declare @对应编码 VARCHAR(40)
declare @客户流水号 int
declare @订单流水号 int
declare @产品流水号 int
declare @单体流水号 int
declare cur_a cursor for
select rtrim(ltrim(Fentryselfs0164)), FDetailID, FInterID, FItemID from inserted
open cur_a
fetch next from cur_a into @对应编码 ,@单体流水号,@订单流水号,@产品流水号
while @@fetch_status=0
begin
if not @对应编码=''
begin
update SEOrderEntry
set Fmapnumber=@对应编码
where FDetailID=@单体流水号
end
set @客户流水号= (select FcustID from SEOrder where FinterID=@订单流水号)
if not exists (select * from ICItemMapping where FitemID=@产品流水号 and FcompanyID=@客户流水号)
insert into ICItemMapping(FID,FItemID,FcompanyID,FPropertyID,Fmapnumber) VALUES (4,@产品流水号,@客户流水号,1,@对应编码)
else
update ICItemMapping
set Fmapnumber=@对应编码
where FitemID=@产品流水号 and FcompanyID=@客户流水号
fetch next from cur_a into @对应编码,@单体流水号,@订单流水号,@产品流水号
end
close cur_a
deallocate cur_a
end
问题:
1. ICItemMapping 目前一条记录都没有 可是还是提示:插入重复的键值
2. 将 insert into ICItemMapping(FID,FItemID,FcompanyID,FPropertyID,Fmapnumber) VALUES (4,@产品流水号,@客户流水号,1,@对应编码)
改为:insert into ICItemMapping(FID,FItemID,FcompanyID,FPropertyID,Fmapnumber) VALUES (4,11,22,1,1)
在输入一条订单记录的情况下可以执行