如有数据库: 产品编号 数量 单位
001 100 aa
001 100 bb
002 200 cc
003 300 dd
003 300 ee
当产品编号为001的任一个产品数量由100改为20时,另一个编号为001的产品数量自动变为100-20=80.
003号产品一样任一个003号的产品比如由300改为150,另一个编号为003的产品数量自动变为300-150=150.能否用触发器实现?
不同单位的同一种产品共同享用数量.
001 100 aa
001 100 bb
002 200 cc
003 300 dd
003 300 ee
当产品编号为001的任一个产品数量由100改为20时,另一个编号为001的产品数量自动变为100-20=80.
003号产品一样任一个003号的产品比如由300改为150,另一个编号为003的产品数量自动变为300-150=150.能否用触发器实现?
不同单位的同一种产品共同享用数量.
解决方案 »
- 又来:Too many actual parameters
- 7年工作经验,想换工作,请问能值多少钱?
- 怎样将TMemoryStream 读入到一个byte数组里面
- 设计性别组合框控件
- 高分请教TreeView问题,在线等待!!!!!!!!!!!!!!
- 高分求救:使用Delphi进行团队开发要采取什么策略?
- Delphi,怎么获取电脑上USB口数量,然后Usb口有没有一个标识。
- to (来自差生市) 来接分
- 急啊,读二进制文件 -----> String ??
- 奇了怪了,我和treeview斗争了三天,想不到……
- 如何使TDateTimePicke只显示‘年’和‘月’,而不显示‘日’阿???
- 打印机问题
CREATE PROCEDURE update_tb
@unit VARCHAR(10),
@num INT
AS
BEGIN
UPDATE tb5 SET 数量=@num WHERE 单位=@unit
UPDATE tb5 SET 数量=数量-@num WHERE 单位 NOT IN (SELECT 单位 FROM tb5 WHERE 单位=@unit)
AND 产品编号 IN (SELECT 产品编号 FROM tb5 WHERE 单位=@unit)
ENDGO
EXEC update_tb 'aa',20
考虑中...
update 表名 set 数量=数量-改变值 where 产品编号='产品编号'and not (标识='更新字段的标识'),就ok了
游标及触发器的写法可参考sql server2000查询分析器中的帮助,另游标使用完成以后不忘记关闭、释放。
before insert or update or delete on aTableName
for each row
declare
l_UpdateNumber number;
begin
l_UpdateNumber := :old.Field - :new.Field ;
insert into bTableName(xxx,yyy,zzz,......)
values(l_UpdateNumber,......);
end updateNumber;
大体上就是这样写的,你自己按需要改一下就行了。
FlowId ProductId ProductAmount Dept
1 001 100 aa
2 002 100 bb
3 003 200 cc
4 004 300 dd
5 005 300 ee
其中FlowId为自增1字段,是表的主键
触发器如下:
create trigger updateAmount on product
for update
asdeclare @FlowId int
declare @ProductId varchar(12)
declare @UpdateAmount numeric(18,2)
declare updateCur cursor for
select FlowId,ProductId,ProductAmount from inserted
open updateCur
fetch next from updateCur into @FlowId,@ProductId,@UpdateAmount
while @@Fetch_status = 0
begin
update product set ProductAmount=ProductAmount-@UpdateAmount
where ProductId=@ProductId and not(FlowId=@FlowId)
fetch next from updateCur into @FlowId,@ProductId,@UpdateAmount
end
close updateCur
deallocate updateCur