标题:请大家帮忙写一个同一种材料加总数的触发器
只看楼主
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
结帖率:70.37%
已结贴  问题点数:10 回复次数:1 
请大家帮忙写一个同一种材料加总数的触发器
生产订单有主表及子表,子表保存订单需要用于生产的物料及数量。
如子表B有很多字段,现列出主要字段:
modid(主表ID),allocalteid(子表ID),invcode(材料编码),free1(宽度) ,qty(应领数量),issqty(已领数量),qtylenth(应领长度) 等字段。
现假设某订单需要用以下材料
modid   allocalteid    invcode   free1  qty  issqty      qtylenth
1      4              04-0100   30     1.5               1883.3
1      5              04-0100   30     55                1883.3
1      6              04-0200   45     1.8               240
1      7              04-0020   45     9                 240
modid相同,就表示同一订单需要的物料
现要写一个触发器,保存的时候,判断如果free1<>null或<>0,则计算同一种物料(invcode,free1相同)的长度是多少,填写到qtylenth字段中。
如上面:
04-0010   30   的长度是:(1.5+55)*1000/30=1883.3
04-0020   45   的长度是:(1.8+9)*1000/45=240  
所以上面对应物料qtylenth 的值分别是:1883.3240
请问这样的触发器最简单的写法是怎样的?
急着用,谢谢大家!


搜索更多相关主题的帖子: 材料 触发器 
2012-04-19 14:22
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
得分:10 
以下是程序段:
拷贝到SQL查询分析器中运行即可。
程序代码:
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE   TRIGGER abc
ON [dbo].[Table1001]
FOR INSERT, UPDATE, DELETE
AS
IF (COLUMNS_UPDATED()&63) >0
update Table1001 set qtylenth=b.qtylenth from
    Table1001 a inner join
    (select modid,invcode,free1,round(sum(qty)*1000/free1,1) as qtylenth from Table1001  where free1>0 group by modid,invcode,free1) b
    on a.modid=b.modid and a.invcode=b.invcode and a.free1=b.free1

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
注意:
1.把程序中的表名:Table1001,换成你自己的表名。
2.如果你的表中的字段数超过8,程序要做一点调整。
3.字段顺序是按你问题中所组顺序,如果你真实表的顺序不同,程序可能也要调整。

做自己喜欢的事!
2012-04-23 01:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366158-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.306589 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved