注册 登录
编程论坛 SQL Server论坛

在sql2000中能否使用自动触发完成条件求和,相减等操作?

jendy5566 发布于 2012-08-20 22:42, 726 次点击
有三个表结构如下:
一、仓储表(tab1)
仓库名(storeN)    容积volume    已用容积(volused)     上一日进货量(yesin)   
    sto1              vol1           vouse1               yes1
    sto2              vol2           vouse2               yes2
    sto3              vol3           vouse3               yes3
    ...               ...            ...                   ...
    ...               ...            ...                   ...

二、车间信息表(works)
车间名(workN)    每小时原料消耗量(matcon)   工作状态(worksta)
  workN1               matcon1                  1
  workN2               matcon2                  0
  workN3               matcon3                  1
    ...                  ...                    X
    ...                  ...                    X

三、剩余原料表(remvol)
剩余原料总量(volsum)   日期(dtime)
   volsum 1               自动获取
   volsum 2               自动获取
   volsum 3               自动获取
        ...                ....

说明:
车间信息表中的“工作状态”只有正常(1),停止工作(0),停止工作时不能统计到“全厂原料总消耗量”。
全厂原料总消耗量=matcon1+matcon3+...
全厂原料拥有量=vouse1+vouse2+vouse3+...+yes1+yes2+yes3+...
每天晚上0点对剩余原料进行统计,使用自动触发的方法
  剩余原料=全厂原料拥有量-全厂原料总消耗量
将" 剩余原料"写入  剩余原料表(remvol)的“volsum”字段中

问题是:这个触发怎么写?写到哪个表中好?
   我思考并试验了两天多,也找了好多资料都还是没能成功,望能得到各位大侠的指点。
    最好能给出代码,先谢谢了!!!
7 回复
#2
jendy55662012-08-20 22:42
自己先顶,谢谢了!
#3
jendy55662012-08-21 08:41
没有人看见???
#4
netlin2012-08-21 08:47
昨晚大家都比较困了!
#5
netlin2012-08-21 08:49
楼主,你的要求是:
每天晚上0点对剩余原料进行统计

这个不用写触发器,也不适合触发器。
你可以考虑使用SQL的作业,设定它自动运行的时间即可。
#6
jendy55662012-08-21 10:05
我昨晚想了一晚应该在SQL里写个存储过程就可能实现了,但本人从没写过存储过程,看来又得花两天时间来学习了。
有没有大侠在行的帮一下啊。。。
#7
jendy55662012-08-21 23:18
写出来了,用sql的作业任务执行,但是好像不能写数据到remvol表中的volsum字段里???如何改正
create proc test
as
declare @matcon numeric(28,8)
declare @volused numeric(28,8)
declare @syyl numeric(28,8)
select @matcon=sum(matcon) from works
select @volused=sum(volused) from tab1
select @syyl=@volused-@matcon
update remvol set volsum=@syyl
怎么解决????
#8
netlin2012-08-22 12:28
楼主,对你的代码做了一些修改,你试一试:

create proc test
as
declare @matcon numeric(28,8)
declare @volused numeric(28,8)
select @matcon=sum(matcon) from works where worksta=1
select @volused=sum(volused) from tab1
insert remvol(volsum) select @volused-@matcon
1