利用游标进行简单的数据先进先出操作
来源:互联网 发布:粒子群聚类算法matlab 编辑:程序博客网 时间:2024/05/16 00:28
创建数据库
if exists (select * from sysobjects where id = OBJECT_ID('[入库信息]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) DROP TABLE [入库信息]
CREATE TABLE [入库信息] ( [名称] [varchar] (40) NULL , [规格型号] [varchar] (40) NULL , [入库数量] [int] NULL , [出库数量] [int] NULL , [库存数量] [int] NULL , [入库时间] [datetime] NULL )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存1' , 'PC530' , 520 , 0 , 520 , '2010-02-10 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存1' , 'PC100' , 100 , 0 , 10 , '2010-02-02 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'PC100' , 20 , 0 , 20 , '2010-10-01 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'PC200' , 50 , 0 , 50 , '2010-10-02 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'PC200' , 80 , 0 , 80 , '2010-10-04 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '内存' , 'DDR2' , 82 , 0 , 82 , '2010-10-03 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '主板' , 'P43' , 532 , 0 , 532 , '2010-08-09 00:00:00.000' )
INSERT [入库信息] ( [名称] , [规格型号] , [入库数量] , [出库数量] , [库存数量] , [入库时间] ) VALUES ( '主板' , 'P35' , 84 , 0 , 84 , '2010-10-25 00:00:00.000' )
代码
--利用游标对数据进行先进先出
--按时间排序库存物资,逐条记录进行出库,当前行库存不够对下一行库存进行出库,直到出库完成
use temp
Declare @入库时间 DateTime
Declare @名称 varchar(40)
Declare @入库数量 int
declare @库存数量 int
declare @出库数量 int
Declare @i int --定义出库数量变量,传入的参数
set @i=82 --设置传入的出库数量
Declare cur_Depart Cursor For --定义游标
Select [名称] , [入库时间] ,[入库数量] ,[库存数量] , [出库数量] from 入库信息 Where 名称 = '内存' and 库存数量 <> 0 Order by 入库时间 desc
Open cur_Depart --创建游标
Fetch From cur_Depart into @名称 , @入库时间 , @入库数量 , @库存数量 ,@出库数量
While @@Fetch_Status = 0 --循环读取
Begin
--判断是否已经出库完成或出库数量是否为0
if @i > 0
begin
if @库存数量 >=@i --如果当前记录的库存大于或等于要出库数量则执行
begin
update 入库信息 set 库存数量 = 库存数量 - @i where 入库时间 = @入库时间
update 入库信息 set 出库数量 = 出库数量 + @i where 入库时间 = @入库时间
set @i = 0
end
if @库存数量 < @i and @库存数量 <> 0 --如果当前记录库存如果小于或等于要出库数量则执行
begin
update 入库信息 set 库存数量 = 0 Where 入库时间 = @入库时间
update 入库信息 set 出库数量 = 出库数量 + @库存数量 where 入库时间 = @入库时间
set @i = @i - @库存数量
end
end
Fetch From cur_Depart into @名称 , @入库时间 , @入库数量 , @库存数量 , @出库数量 --下一条记录
End
Close cur_Depart --关闭游标
Deallocate cur_Depart --释放资源
- 利用游标进行简单的数据先进先出操作
- 先进先出的两个简单例子
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 先进先出的数据冲销处理
- 两种文件写操作的页缓存数据刷出操作和函数调用路径分析
- 用memcache实现简单的先进先出队列
- d3d编程中的DECLSPEC_DEPRECATED错误的解决办法
- weblogic获取Java Thread Dump
- Windows Phone 7 开发 31 日谈——第7日:启动器
- apache 和 tomcat的关系
- 嵌入式linux c 学习笔记9---虚拟内存管理
- 利用游标进行简单的数据先进先出操作
- VS2008中开发智能设备程序(手机软件)的总结【转】
- gstreamer相关的一些好文章
- [游戏]_纪念一下dnf,安心准备考研
- 心里难受了看看吧
- .NET Interop入门-P/Invoke和Reverse P/Invoke
- 狗眼看不起乡下人,鄙视(看见伯伯的笑容,我想哭了)
- 我看QQ与360之争
- Oracle/PLSQL ORA-01451错误及错误码查询网站