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的游标的综合运用的更多相关文章

  1. MSSQL手札一 MSSQL的游标

    和oracle的不同,MSSQL中没有隐式游标的说法,也没有%type和%rowtype这样根据数据库字段实时更新变量含义的关键字,MSSQL的游标类似于oracle的显示游标,需要自己去手动关闭, ...

  2. mssql 2008 游标 临时表 作业批处理失败问题

    在项目中,写过一个作业,当订单超过1个小时未支付,则取消订单,同时返回订单使用的积分,优惠券,余额. 经过调试发现,作业存储过程中,使用了游标,而且使用了临时表,在游标第一次创建临时表时,没有问题,但 ...

  3. mssql数据库游标批量改动符合条件的记录

    //需求:因为项目刚上传,没有票数,为了表现出一定的人气,须要在一開始把各项目的票数赋一个值 , 但每一个项目不能一样,否则easy看出问题,呵呵 . DECLARE @Id varchar(50) ...

  4. PL/SQL -->隐式游标(SQL%FOUND)

    PL/SQL -->隐式游标(SQL%FOUND) 分类: SQL/PLSQL 基础2010-12-22 16:23 4084人阅读 评论(0) 收藏 举报 sqlexceptionoracle ...

  5. .NET软件工程师面试总结

    1.手写画出系统架构图,系统代码架构,有什么技术难点?  2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...

  6. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  7. 来科普下游标(MSSQL)这东西。。。

    刚刚接到一个面试电话,对头的先生问我懂不懂触发器和存储过程,当时是觉得有些好笑,毕竟“视图.触发和存储”是咱数据库工程师的吉祥三宝,怎么可能不认识?只是稍后他还问了下游标这东西,仔细想想我是不常使用C ...

  8. MSSQL一种取代游标的方案

    今天看到一篇文章写的自己整理记录下,据说比用游标快. DECLARE @字段1 数据类型; DECLARE @字段2 数据类型; DECLARE @TMP_WHILE_ID INT; ,),TMP_W ...

  9. MsSql 游标 修改字段两个表关联 表向另个表插入记录

    -- 方法1:游标-- 声明变量DECLARE @SystemUserId AS UNIQUEIDENTIFIER -- 声明游标DECLARE C_SystemUser CURSOR FAST_FO ...

随机推荐

  1. 关于存储过程 output 问题

    在游标循环当中给 output 变量赋值报 指定的转换无效 错误必须在存储过程最后再给 output 变量赋值

  2. java常量池

    Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray. anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回 ...

  3. 【Python】实践笔记

    为什么要在脚本中加入? import sys reload(sys) sys.setdefaultencoding('utf-8')

  4. PL/SQL中LOOP循环控制语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  5. 使用源代码安装lnmp

    一.安装nginx前,安装pcre. # tar zxvf pcre-8.12.tar.gz# ./configure# make# make install 二.安装nginx # tar zxvf ...

  6. Blog CSS

    你好 print("你好.") haode

  7. 一、oracle 高水位线详解

    一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...

  8. Mysql线程池优化笔记

    Mysql线程池优化我是总结了一个站长的3篇文章了,这里我整理到一起来本文章就分为三个优化段了,下面一起来看看.     Mysql线程池系列一(Thread pool FAQ) 首先介绍什么是mys ...

  9. hdu 3172 Virtual Friends(并查集)University of Waterloo Local Contest 2008.09

    题目比较简单,但作为长久不写题之后的热身题还是不错的. 统计每组朋友的朋友圈的大小. 如果a和b是朋友,这个朋友圈的大小为2,如果b和c也是朋友,那么a和c也是朋友,此时这个朋友圈的大小为3. 输入t ...

  10. hadoop2.0中无法启动datanode的问题

    问题描述:在启动datanode进程时,能成功的启动:但用jps查看进程时,发现进程不存在,下面是在datanode日记文件的错误信息 如下图的截屏所示: 主要原因:发生错误的原因:由于把data放在 ...