一、表结构
表A(零件库)
零件编号 库存量
A7788250 12
B7788250 10
C7788250 15表B:(库存调整)
ID 调整单号 零件编号 调整数量
表C:(零件变动)
ID DH 零件编号 数量 日期 种类二、要进行的操作
新开一张库存调整单,数据如下
ID 调整单号 零件编号 调整数量
1 DT081120001 A7788250 2
2 DT081120001 C7788250 -6要求根据库存调整单[DT081120001]中的内容,对零件库进行更新,并将本次调整内容写入[零件变动]表三、操作后结果如下:
表A(零件库)
--------------------------------------------------
零件编号 库存量
A7788250 14
B7788250 10
C7788250 9表C:(零件变动)
-----------------------------------------------------------------------------------
ID DH 零件编号 数量 日期 种类
1 DT081120001 A7788250 2 getdate() 调库
2 DT081120001 C7788250 -6 getdate() 调库
四、要求:不能使用游标
表A(零件库)
零件编号 库存量
A7788250 12
B7788250 10
C7788250 15表B:(库存调整)
ID 调整单号 零件编号 调整数量
表C:(零件变动)
ID DH 零件编号 数量 日期 种类二、要进行的操作
新开一张库存调整单,数据如下
ID 调整单号 零件编号 调整数量
1 DT081120001 A7788250 2
2 DT081120001 C7788250 -6要求根据库存调整单[DT081120001]中的内容,对零件库进行更新,并将本次调整内容写入[零件变动]表三、操作后结果如下:
表A(零件库)
--------------------------------------------------
零件编号 库存量
A7788250 14
B7788250 10
C7788250 9表C:(零件变动)
-----------------------------------------------------------------------------------
ID DH 零件编号 数量 日期 种类
1 DT081120001 A7788250 2 getdate() 调库
2 DT081120001 C7788250 -6 getdate() 调库
四、要求:不能使用游标
解决方案 »
- SQL SERVER2000的触发器问题
- 如何实现这个功能: where 列1,列2,列3 in (select 列1,列2,列3 from 表名)
- 获取非指定内容的字符
- 一个已经定义好的数据库的日志文件大小能修改不?能改的话怎么改啊?
- 这种语句怎么写??????????????????
- sql 中视图代码代码找错
- 一个查询语句,向各位高手求解,邹建大哥在吗?谢谢!在线等待。。。
- SQL中怎样实现“宏”的用法
- 一个关于针对多个关键字搜索语句的执行效率问题
- 如何自动运行.sql存储过程?
- sql server 2000 死都装不上去,帮忙看看sqlstp.log,问题在哪里?
- 同时安装sql server2000和sql server2005的问题
insert #a
select 'A7788250', 12 union all
select 'B7788250', 10 union all
select 'C7788250', 15 create table #b(ID int,调整单号 varchar(50),零件编号 varchar(50),调整数量 int)
insert #b
select 1, 'DT081120001', 'A7788250', 2 union all
select 2, 'DT081120001', 'C7788250', -6 --表A(零件库)
update #a
set 库存量=库存量+(select sum(调整数量) from #b where 零件编号=a.零件编号 and 调整单号='DT081120001')
from #a a,#b b
where a.零件编号=b.零件编号
and b.调整单号='DT081120001'select * from #a
/**
零件编号 库存量
-------------------------------------------------- -----------
A7788250 14
B7788250 10
C7788250 9
**/
select ID,调整单号 as DH,零件编号,调整数量 as 数量,getdate() as 日期,'调库' as 种类 into #c from #bselect * from #c
/**
ID DH 零件编号 数量 日期 种类
----------- -------------------------------------------------- -------------------------------------------------- ----------- ------------------------------------------------------ ----
1 DT081120001 A7788250 2 2008-11-21 22:27:37.293 调库
2 DT081120001 C7788250 -6 2008-11-21 22:27:37.293 调库
**/
--表A(零件库)
update #a
set 库存量=库存量+(select sum(调整数量) from #b where 零件编号=a.零件编号 and 调整单号=b.调整单号)
from #a a,#b b
where a.零件编号=b.零件编号
and b.调整单号='DT081120001'
as
select 零件编号,原库存量=库存量,tzsl=0,xkcsl=0 into #tmp from a --生成临时表update #tmp
set tzsl=tz.调整数量
from #tmp kc,b tz
where kc.零件编号=tz.零件编号 and tz.调整单号=@tzdh --更新临时表调整数量update #tmp
set xkcsl=原库存量+tzsl --更新临时表新库存update a
set 库存量=t.xkcsl
from a kc,#tmp t
where kc.零件编号=t.零件编号 --回写到A表中insert into c
select ID,调整单号 as DH,零件编号,调整数量 as 数量,getdate() as 日期,'调库' as 种类 from b where 调整单号=@tzdh
--更新变动纪录
--结束存储过程
@DH char(11)SELECT @DH='DT081120001'BEGIN TRANSACTION
UPDATE 零件库
SET 库存量=库存量+库存调整.调整数量
FROM 零件库 INNER JOIN 库存调整 ON 零件库.零件编号=库存调整.零件编号
WHERE 库存调整.DH=@DH INSERT 零件变动(DH,零件编号,数量,日期,种类)
SELECT DH,零件编号,调整数量,GETDATE(),'调库'
FROM 库存调整
WHERE DH=@DHCOMMIT TRANSACTIONIF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION
RAISERROR('%s库存调整出错,操作被取消。',16,1,@DH)
END