首页 > 数据库 >SQL SERVER 2008 存储过程使用记录 游标

SQL SERVER 2008 存储过程使用记录 游标

时间:2022-11-02 16:23:54浏览次数:40  
标签:-- UserId 游标 SERVER RAB003 SQL RAA001 SELECT

USE [LH]--数据库名称
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROC [dbo].[SGMRAA123]--起的存储过程名称
AS
DECLARE @j int
DECLARE @SqlStr NVARCHAR(MAX) --最终拼接执行的sql语句
BEGIN
SET @j=0;
--创建一个表#A存储需要的工单数据
CREATE TABLE #A(
idx int IDENTITY(1,1),
RAA001 NVARCHAR(100),
RAB003 NVARCHAR(100),
RAB007 DECIMAL(28,6),
RAB007S DECIMAL(28,6),
)
CREATE TABLE #B(
RAA001 NVARCHAR(100),
)
--创建临时库存表
CREATE TABLE #R(
LOA001 NVARCHAR(100),--品号
KRAB DECIMAL(28,6) --库存结余
)
BEGIN
--数据插入工单表
INSERT INTO #A
SELECT RAA001,RAB003,ISNULL(RAB007,0)RAB007,ISNULL(RAB007,0)RAB007S FROM SGMRAB LEFT JOIN SGMRAA ON RAA001=RAB001 WHERE RAA024='T' AND RAA020='N' AND RAA965='T' AND RAB003 NOT LIKE '2%' AND RAA015 LIKE '3%' ORDER BY RAA001
END
--数据插入库存表
INSERT INTO #R
SELECT LOA001, SUM(ISNULL(LOA003,0))LOA003 FROM JSKLOA LEFT JOIN TPADDA ON DDA001=LOA002 WHERE DDA002='1' GROUP BY LOA001
END

DECLARE @UserId varchar(50) --定义接收值
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT idx FROM #A) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @UserId;--读取第一行数据 @UserId次数就是第一个idx
WHILE @@FETCH_STATUS = 0
BEGIN

--从表中把库存做扣减 从小到大依次减 扣库存

UPDATE #A SET RAB007S=C.A3-C.A2 FROM (
SELECT B.RAB003,case when #R.KRAB<0 then 0 else #R.KRAB end A2, ISNULL(B.RAB007,0) A3 FROM #A B left join (select * from #R where ISNULL(#R.KRAB,0)>=0)#R on #R.LOA001=B.RAB003 WHERE idx=@UserId) C WHERE #A. idx=@UserId
update #R set KRAB=ISNULL(#R.KRAB,0)-ISNULL(RAB007,0) from #A where #R.LOA001=#A.RAB003 and #A.idx=@UserId
FETCH NEXT FROM My_Cursor INTO @UserId;--读取下一行数据@UserId=1 在循环一直到idx结束
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
--删0051《=0的
delete from #A where RAB007S<=0
BEGIN
INSERT INTO #B
SELECT DISTINCT RAA001 FROM SGMRAA LEFT JOIN SGMRAB ON RAA001=RAB001 WHERE RAA024='T' AND RAA020='N' AND RAA965='T' AND RAB003 NOT LIKE '2%' AND RAA015 LIKE '3%' and RAA001 not in(select distinct RAA001 from #A)

END


--select * from #A

-- select * from #R
SET @SqlStr= 'SELECT * FROM #B'
EXEC(@SqlStr);

标签:--,UserId,游标,SERVER,RAB003,SQL,RAA001,SELECT
From: https://www.cnblogs.com/XiaoHongMao1/p/16851398.html

相关文章

  • 解决Deprecated: mysql_connect(): The mysql extension is deprecated_F_hawk1
    解决方法1:禁止php报错display_errors=On改为display_errors=Offdisplay_errors=On改为display_errors......
  • mysql——left join on and和left join on where的区别
    参考https://www.cnblogs.com/cgsdg/p/16426658.html 总结:and条件语句不会剔除不满足条件的左表的行。where条件语句会剔除。   ......
  • Docker--mysql(centos)
    Docker--mysql当前启动systemctlstartdocker自启动systemctlenabledocker1.拉取mysql镜像dockerpullmysql:5.7其他版本参考dockerhub2.创建容器,并启动1.......
  • MySQL_外连接
    左/右外连接应用场景用于查询一个表中有,另一个表中没有的记录特点1外连接的查询结果为主表中的所有记录      如果从表中有和它匹配的,则显示匹配的值......
  • MySQL_连接查询_小结
    Sql92VSsql99功能      Sql99支持的较多可读性      Sql99实现连接条件和筛选条件的分离,可读性较高 #内连接SELECT<select_list>FROMAINNERJ......
  • MySQL__连接查询_sql99
    语法Select查询列表From表1别名【连接类型】Join表2别名On连接条件【Where筛选条件】【groupby分组】【having筛选条件】【orderby排序列表】内连接......
  • mysql 性能问题查找
    进程相关命令1.显示哪些线程正在运行:只列出前100条方法1showprocesslist;![](https://img2022.cnblogs.com/blog/2298258/202211/2298258-20221102113410395-37886337......
  • MySQL_连接查询_等值连接
    ·引例SELECTname,ageFROMstudents,teachersWHEREstudents.id=teachers.students_id; ·特点表的顺序:两个表的顺序可以调换可以加筛选:AND可以加分组:逗号隔......
  • MySQL_分组函数
    功能用作统计使用,又称为聚合函数或统计函数或组函数分类Sum求和Avg平均值Max最大值Min最小值Count计算个数特点1sum、avg一般用于处理数值型2以上分组函......
  • mysql绿色安装
     本文介绍mysql压缩包安装方式;压缩包下载地址:https://dev.mysql.com/downloads/mysql/5.5.html#downloads  解压下载好的压缩包文件:  打开文件,内容如下: ......