MsSQL的游标的综合运用
USE [ChiefWMS]
GO
/****** Object: StoredProcedure [dbo].[WMS_Check] Script Date: 04/05/2016 09:51:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
author:CJ
Date:2016-03-09
原存储过程名称:dbo.WMS_Check
货品组装单的反审核功能
*/
ALTER procedure [dbo].[WMS_Check]
(
--@ItemNo nvarchar(200)='ZD1233-350,ZD2993B-314',
--@OutQty nvarchar(200)='10,10',
----加仓库
--@StockNo nvarchar(200)='172仓库,172仓库'
@ItemNo nvarchar(200)=',',
@OutQty nvarchar(200)=',',
--加仓库
@StockNo nvarchar(200)=','
)
AS
begin
--declare @ItemNo nvarchar(200)='ZD1233-350,ZD2993B-314'
--declare @OutQty nvarchar(200)='200,200'
declare @Temp_Table table
(
ID int identity(1,1),
ItemNo nvarchar(20),
OutQty int,
StockNo nvarchar(20)
)
if(@ItemNo<>',' and @OutQty<>',' and @StockNo<>',')
begin
--select * into #Temp_ItemNo FROm dbo.FN_SplitSTR('810647486,810647485,810647484,810647483',',')
--select * into #Temp_OutQty FROm dbo.FN_SplitSTR('123,423,562,147',',')
select * into #ItemNo_Table FROm dbo.FN_SplitSTR(@ItemNo,',')
select * into #OutQty_Table FROm dbo.FN_SplitSTR(@OutQty,',')
select * into #StockNo_Table From dbo.FN_SplitSTR(@StockNo,',')
insert @Temp_Table
select A.Col,B.Col,C.Col from #ItemNo_Table A
join #OutQty_Table B on A.ID=B.ID
join #StockNo_Table C on A.ID=C.ID
--select * from @Temp_Table
end
else
begin
select '产品数据不全!'
return
end
----判断某一个出库数大于总共的库存数 就返回前端告知某物料不能出库 出库数不足
declare @SumStockQty int
declare @Check_ItemNo nvarchar(20)
declare @Check_OutQty int
declare @Check_StockNo nvarchar(20)
declare Check_Cur cursor local
For
select ItemNo,OutQty,StockNo from @Temp_Table
open Check_Cur
Fetch next from Check_Cur into @Check_ItemNo,@Check_OutQty,@Check_StockNo
while(@@FETCH_STATUS=0)
begin
if not exists(select * from dbo.WMS_StockDetail where ItemNo=@Check_ItemNo and StockNo=@Check_StockNo)
begin
select '零件编号:'+@Check_ItemNo+'在 编号:'+@Check_StockNo+'的仓库 没有库存 请更改其他仓库!'
return
end
select @SumStockQty=SUM(StockQty) from dbo.WMS_StockDetail where ItemNo=@Check_ItemNo and StockNo=@Check_StockNo
if(@Check_OutQty>@SumStockQty)--出库数大于总数
begin
select '零件编号:'+@Check_ItemNo+'出库数:'+cast(@Check_OutQty as nvarchar(20))+'大于仓库'+@Check_StockNo+'库存数'+cast(@SumStockQty as nvarchar(30)) as Result
return
end
--select 'dsfds'
Fetch next from Check_Cur into @Check_ItemNo,@Check_OutQty,@Check_StockNo
end
Close Check_Cur
Deallocate Check_Cur
----------------------------------------------------------------- 判断 End
declare @Temp_ItemNo nvarchar(20)
declare @Temp_OutQty int
declare @Temp_StockNo nvarchar(20)
declare @Result int =0
declare First_Cur cursor local
For
select ItemNo,OutQty,StockNo from @Temp_Table
open First_Cur
Fetch next from First_Cur into @Temp_ItemNo,@Temp_OutQty,@Temp_StockNo
while(@@FETCH_STATUS=0)
begin
select * into #TempWMSCheck from dbo.WMS_StockDetail where ItemNo=@Temp_ItemNo and StockNo=@Temp_StockNo order by CreateDate asc
--select * from #TempWMSCheck
declare @ID int
declare @StockQty int
declare MyCursor cursor local
For
select ID,StockQty from #TempWMSCheck
Open MyCursor
Fetch next From MyCursor Into @ID,@StockQty
While(@@Fetch_Status = 0)
Begin
--9000-8590=410
if(@StockQty>0)
begin
if(@Temp_OutQty-@StockQty>0)
begin
update dbo.WMS_StockDetail
set StockQty=0 where ID=@ID
set @Temp_OutQty=@Temp_OutQty-@StockQty
end
else
begin
update dbo.WMS_StockDetail
set StockQty=@StockQty-@Temp_OutQty
where ID=@ID
--select @Result as Result
--return (直接跳出整个循环 所以此处不能用return)
break--当满足的情况下中断这次循环 进行外面的下一次循环
end
end
else
begin
set @Result=1
end
Fetch next From MyCursor Into @ID,@StockQty
end
Close MyCursor
Deallocate MyCursor
drop table #TempWMSCheck
Fetch next from First_Cur into @Temp_ItemNo,@Temp_OutQty,@Temp_StockNo
end
Close First_Cur
Deallocate First_Cur
delete from @Temp_Table
drop table #ItemNo_Table
drop table #OutQty_Table
drop table #StockNo_Table
select @Result as Result
end
MsSQL的游标的综合运用的更多相关文章
- MSSQL手札一 MSSQL的游标
和oracle的不同,MSSQL中没有隐式游标的说法,也没有%type和%rowtype这样根据数据库字段实时更新变量含义的关键字,MSSQL的游标类似于oracle的显示游标,需要自己去手动关闭, ...
- mssql 2008 游标 临时表 作业批处理失败问题
在项目中,写过一个作业,当订单超过1个小时未支付,则取消订单,同时返回订单使用的积分,优惠券,余额. 经过调试发现,作业存储过程中,使用了游标,而且使用了临时表,在游标第一次创建临时表时,没有问题,但 ...
- mssql数据库游标批量改动符合条件的记录
//需求:因为项目刚上传,没有票数,为了表现出一定的人气,须要在一開始把各项目的票数赋一个值 , 但每一个项目不能一样,否则easy看出问题,呵呵 . DECLARE @Id varchar(50) ...
- PL/SQL -->隐式游标(SQL%FOUND)
PL/SQL -->隐式游标(SQL%FOUND) 分类: SQL/PLSQL 基础2010-12-22 16:23 4084人阅读 评论(0) 收藏 举报 sqlexceptionoracle ...
- .NET软件工程师面试总结
1.手写画出系统架构图,系统代码架构,有什么技术难点? 2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- 来科普下游标(MSSQL)这东西。。。
刚刚接到一个面试电话,对头的先生问我懂不懂触发器和存储过程,当时是觉得有些好笑,毕竟“视图.触发和存储”是咱数据库工程师的吉祥三宝,怎么可能不认识?只是稍后他还问了下游标这东西,仔细想想我是不常使用C ...
- MSSQL一种取代游标的方案
今天看到一篇文章写的自己整理记录下,据说比用游标快. DECLARE @字段1 数据类型; DECLARE @字段2 数据类型; DECLARE @TMP_WHILE_ID INT; ,),TMP_W ...
- MsSql 游标 修改字段两个表关联 表向另个表插入记录
-- 方法1:游标-- 声明变量DECLARE @SystemUserId AS UNIQUEIDENTIFIER -- 声明游标DECLARE C_SystemUser CURSOR FAST_FO ...
随机推荐
- POJ 3687 Labeling Balls【拓扑排序 优先队列】
题意:给出n个人,m个轻重关系,求满足给出的轻重关系的并且满足编号小的尽量在前面的序列 因为输入的是a比b重,但是我们要找的是更轻的,所以需要逆向建图 逆向建图参看的这一篇http://blog.cs ...
- IE6、IE7、IE8中overflow:hidden无效问题
在做图片无缝滚动效果时遇到了这个兼容问题 div宽1000px高250px超出隐藏. 但在Firefox中正常,超出部分隐藏,但是在IE6.IE7.IE8.Sogou高速下都显示了出来.做了这么多年的 ...
- ADO和DAO的区别
ADO(ACTIVEX DATA OBJECTS)应用层的数据访问接口ODBC 数据库驱动接口OLE DB 系统级数据访问接口DAO (DATA ACCESS OBJECTS) 对象的数据访问接口AD ...
- Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 53
项目问题解析“Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 53.”这个问题是最近调试app的时 ...
- Android 开发问题集合
1.屏幕横.竖切换 修改“AndroidManifest.xml”的android:screenOrientation 一般需要:landscape.portrait 2.修改应用名字 修改“Andr ...
- Android获取SharedPreferences失败,且App无法启动
说明: 一个app访问另外一个app的SharedPreferences,程序启动之后没有显示界面就卡死了,无任何提示信息. 错误原因: 应用调用createPackageContext失败,但是也不 ...
- I.MX6 lcd lvds hdmi bootargs
/********************************************************************* * I.MX6 lcd lvds hdmi bootarg ...
- Squid故障
1.COSS will not function without large file support (off_t is 4 bytes long. Please reconsider recomp ...
- group by的使用
1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...
- 使ViewFlipper中的WebView实现手势效果
使ViewFlipper中的WebView实现手势效果 今天写Blog阅读器的时候遇到了这个问题,把它分享给大家,让同样是新手们少走冤枉路始初写这个功能的时候,用过了好多方法,也耗了不少时间去研究 ...