求教sql server2000触发器,更新、修改、删除一个表,库存自动增减的写法。

我有一个出入库流水账表,一个库存表,现需要在出入库流水账中新增删除修改一个记录,库存表中的商品数量自动更新。特殊情况,如果碰到输入的商品库存中没有,需要新增这个商品的品种。比如611105没有库存,需要增加这个品种。
表一:出入库流水帐
-------------------------------------------
商品代码 入库数量 出库数量
-------------------------------------------
611101 1000
611101 50
611102 3000
611103 419
611101 130
611101 1300
611101 150
611102 3000
611103 49
611101 30
611105 5000
表二:库存
-------------------------------------------
商品代码 数量
-------------------------------------------
611101 5000
611102 3250
611103 49
611104 30

ALTER TRIGGER [tri_UpdateStock]
ON [dbo].[出入库流水帐] FOR INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @ProductCode NVARCHAR(10)
DECLARE @OldInNum INT
DECLARE @NewInNum INT
DECLARE @OldOutNum INT
DECLARE @NewOutNum INT
SELECT @OldInNum=ISNULL(入库数量,0),@OldOutNum= ISNULL(出库数量,0) FROM DELETED
SELECT @ProductCode=商品代码 , @NewInNum=ISNULL(入库数量,0),@NewOutNum= ISNULL(出库数量,0) FROM INSERTED
--如果数据不存在,先插入
INSERT INTO 库存
SELECT @ProductCode,0 WHERE NOT EXISTS (SELECT 1 FROM 库存 WHERE 商品代码=@ProductCode )
--更新数量
UPDATE 库存 SET 数量=数量-ISNULL(@OldInNum,0)+ISNULL(@NewInNum,0)+ISNULL(@OldOutNum,0)-ISNULL(@NewOutNum)
WHERE 商品代码=@ProductCode

END追问

调试 错误213:插入错误:列名或所提供值的数目与表定义不匹配。
于是我将下面部分代码删除
--如果数据不存在,先插入
。。。
--更新数量

删除插入这部分代码。可以通过,估计就是插入新增的这块有问题。我总看也不知道哪里的问题。
继续调试,发现,删除数据,库存量没有一点变化。
不好意思,实在是初学。麻烦再看一下,那里错了。
十分感谢!!

追答

你给我看到的表的列数不是你实际的列数,修改为:
INSERT INTO 库存(商品代码 ,数量)
SELECT @ProductCode,0 WHERE NOT EXISTS (SELECT 1 FROM 库存 WHERE 商品代码=@ProductCode )
如果这个库存表还有其他字段,前提是其它字段可以为空或者有默认值,否则还是会出错

追问

非常感谢,成功了。
就是删除数据时发现没动静。
结果在SELECT @OldInNum=ISNULL(入库数量,0),@OldOutNum= ISNULL(出库数量,0) FROM DELETED
中间插入赋值即:SELECT @ProductCode=商品代码 ,
@OldInNum=ISNULL(入库数量,0),@OldOutNum= ISNULL(出库数量,0) FROM DELETED
至此程序完整了。数据正确无误。再次感谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-14
alter trigger tri_asb
on asb for insert,delete
as
begin
declare @rk int
declare @ck int
declare @sid varchar(20)
select @sid=商品代码 ,@rk =入库数量,@ck=出库数量 from inserted
if not exists(select * from asb where 商品代码=@sid)
insert into bsb(商品代码,数量) values(@sid,@rk-@ck)
else
update bsb set 数量=数量+@rk-@ck where 商品代码=@sid

end
相似回答