触发器问题 (金蝶系统)

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)

在输入一条订单记录的情况下可以执行
...全文
586 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xialk 2008-03-27
  • 打赏
  • 举报
回复
set @客户流水号= (select FcustID from SEOrder where FinterID=@订单流水号)

应该是这段代码错误,因为执行后 @客户流水号 为空值
可是为什么在数据库表 seorderentry 中直接 增加或者修改可以执行呢?
帮帮忙哦
xialk 2008-03-15
  • 打赏
  • 举报
回复
郁闷哦 在数据库表中修改 seorderentry表 可以正常执行 可是在金蝶系统中修改就不可以
中国风 2008-03-15
  • 打赏
  • 举报
回复
	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,@对应编码)

--问题在这一段,正确赋值就行了
dawugui 2008-03-15
  • 打赏
  • 举报
回复
很长很麻烦.
中国风 2008-03-15
  • 打赏
  • 举报
回复
ICItemMapping--的重复赋值?

--------那一个字段报错?
zheninchangjiang 2008-03-15
  • 打赏
  • 举报
回复
因为inserted可能有多条记录,你的逻辑错误造成的

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧