SQL触发器

fqcotory 2011-03-16 08:58:47
有三张表:
1.材料库存表:Item_store:item_id(主键),Item_name(材料名称),Store_num(库存数量)
2.采购入库主表:Instore_m:mid(主键),Instroe_date(入库日期),Instore_no(入库单号),State_num(单据状态)
3.采购入库明细 Instore_d:mid(主表 mid),DID(主键),item_id(材料 ID),instore_num(入库数量)
请对采购入库主表Instore_m写一触发器,在State_num的值由20变为40时完成下面功能:对该采购单对应的明细表中的所有材料的数量按Item_id对应分别把采购数量加到库存表中相应的item_id的材料的库存数量(Store_num)上。



请问这个触发器怎么写啊,没搞懂哦,谢谢。
...全文
96 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fqcotory 2011-03-17
  • 打赏
  • 举报
回复
大家说说看怎么写啊,谢谢。
fengwei813 2011-03-17
  • 打赏
  • 举报
回复
我这里有个存储过程、比较适合你了。
人云吾亦云 曰: 能用存储过程就不要用触发器了,可以百度一下触发器利弊;
我这里的 i_stockin_master(入库主表) i_stockin_detail(入库明细表)
i_item_stock(库存表)

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Create procedure proc_stock_in_modify_stocknum(@input_id varchar(20))--审核时实时修改库存日和月数量
as
begin transaction
declare @ware_id varchar(10),@site_id varchar(10),@item_id varchar(40),@deli_type char(1)
declare @meas_unit varchar(4),@df_no varchar(20),@input_type char(1),@move_id varchar(20)
declare @out_id varchar(20),@real_quan Decimal(12,2),@bad_quan Decimal(12,2),@month varchar(8)
declare @goods_formno varchar(20),@client_id varchar(12),@check_date datetime
declare @last_date datetime,@end_quan decimal(12,3),@last_month varchar(8)

--定义游标
declare cur_input cursor for
select a.in_ware_id,a.input_type,a.df_no,b.site_id,b.item_id,b.real_quan,a.move_id,a.input_date
from i_stockin_master a,i_stockin_detail b
where a.input_id = b.input_id and a.input_id = @input_id

open cur_input
fetch cur_input into @ware_id,@input_type,@df_no,@site_id,@item_id,@real_quan,@move_id,@check_date
while @@fetch_status = 0
begin
--改变库存
if exists (select * from i_item_stock
where ware_id = @ware_id and site_id = @site_id and item_id = @item_id )
update i_item_stock set quantity = isnull(quantity,0) + isnull(@real_quan,0)
where ware_id = @ware_id and site_id = @site_id and item_id = @item_id
else
begin
select @meas_unit = meas_unit from material where item_id = @item_id
insert into i_item_stock(ware_id,site_id,item_id,meas_unit,quantity)
values(@ware_id,@site_id,@item_id,@meas_unit,isnull(@real_quan,0))
end

fetch cur_input into @ware_id,@input_type,@df_no,@site_id,@item_id,@real_quan,@move_id,@check_date

end

close cur_input
deallocate cur_input

update i_stockin_master set state = 'C' where input_id = @input_id

select 1
commit transaction
return

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

fqcotory 2011-03-16
  • 打赏
  • 举报
回复
大家帮帮忙吧

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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