SQL 批量更新插入,遍历

1)存储过程  传入参数 字符串,分割    获取插入临时表  临时表数据再插入表中,根据ID进行批量更新插入操作

ALTER PROCEDURE [dbo].[SP_PDA_UID_Collection]  
    (  
	  @partno NVARCHAR(max),
	  @carton Nvarchar(max),
	  @uid Nvarchar(max),
	  @operName Nvarchar(50)
    )  
AS   
    BEGIN  
   
        SET NOCOUNT ON ;  
        --创建临时表 
		CREATE TABLE #tmp_UID(
              PartNO  NVARCHAR(max),
              ContainerNO Nvarchar(max),
              [UID] Nvarchar(max),
              OperName Nvarchar(50) 
              )
        --存储扫描数据
	    INSERT INTO #tmp_UID  
       (        
              PartNO,
              ContainerNO,
              [UID],
              OperName
       )  
         SELECT                         
              t1.value,
              t2.value,
              t3.value,
              @operName 
              FROM dbo.Fn_Split(@partno,',') as t1 
			  inner join dbo.Fn_Split(@carton,',') as t2 on t1.id=t2.id
			  inner join dbo.Fn_Split(@uid,',') as t3 on t3.id=t2.id 
		--inner join dbo.Fn_Split(@operName,',') as t4 on t4.id=t3.id 
			  
	    --根据UID判断 进行更新插入操作
	    UPDATE A
             SET PartNO=B.PartNO,ContainerNO=B.ContainerNO,UpdateBy=B.OperName,UpdateDate=GETDATE() 
        FROM WMS_UID_Collection A
        INNER JOIN #tmp_UID B ON A.UID=B.UID
        
        INSERT INTO WMS_UID_Collection
             SELECT A.PartNO,A.ContainerNO,A.UID,0,A.OperName,GETDATE() as CreateDate,'' as UpdateBy,NULL as UpdateDate FROM #tmp_UID A
                    LEFT JOIN WMS_UID_Collection B ON A.UID=b.UID 
                    WHERE B.UID IS NULL
                    
        --移除临时表
		DROP TABLE 	#tmp_UID

    END                                    
             
  
  
  
  

2)创建历史表,插入数据,遍历临时表 获取行ID 进行更新操作

--更新备货详情表状态    
		CREATE TABLE #tmp_StockUpPart(
              OutboundOrderNO  NVARCHAR(100),
              PartNO NVARCHAR(100),
              InventoryID UNIQUEIDENTIFIER,
              Temp_PartID UNIQUEIDENTIFIER) 
              
		INSERT INTO #tmp_StockUpPart    --临时表存库存表关联的PartId                     
       (                     
        OutboundOrderNO,
        PartNO,
        InventoryID,    
        Temp_PartID
       )                                
        SELECT   
         p.[OutboundOrderNO],
         p.[PartNO],
         p.[InventoryID],
         p.[StockUpPartID]  FROM [P2WMS_WH71].[dbo].[WMS_Outbound_StockUpPick] as p 
         LEFT JOIN [P2WMS_WH71].[dbo].[WMS_Outbound_StockUp] as up  ON  up.StockUpOrderNo=p.OutboundOrderNo  
         WHERE  p.OutboundOrderNO=@OrderNo AND p.InventoryID=@InventoryID GROUP BY p.[OutboundOrderNO],p.[PartNO],p.[InventoryID],p.[StockUpPartID] ;
		
		DECLARE @Temp_PartID  NVARCHAR(100)
		DECLARE @temp_GIQty  int
		DECLARE @temp_PickEAQty  int
		
		WHILE EXISTS(SELECT Temp_PartID FROM #tmp_StockUpPart)  --遍历PartId
		
		   BEGIN 
                    SELECT @Temp_PartID= Temp_PartID FROM #tmp_StockUpPart;
                    
                    SELECT @temp_GIQty=SUM(GIQty) FROM [P2WMS_WH71].[dbo].[WMS_Outbound_StockUpPart] WHERE StockUpPartID=@Temp_PartID
                    SELECT @temp_PickEAQty=SUM(PickEAQty) FROM [P2WMS_WH71].[dbo].[WMS_Outbound_StockUpPick] WHERE StockUpPartID=@Temp_PartID and  MoveState =2 and OutboundOrderNO=@OrderNo
                    
                    IF(@temp_PickEAQty<@temp_GIQty)--部分移库
                    UPDATE [P2WMS_WH71].[dbo].[WMS_Outbound_StockUpPart] SET MoveState=1 WHERE StockUpPartID=@Temp_PartID 
                    ELSE                       --全部移库
                    UPDATE [P2WMS_WH71].[dbo].[WMS_Outbound_StockUpPart] SET MoveState=2 WHERE StockUpPartID=@Temp_PartID 
                    
                    
				 DELETE FROM #tmp_StockUpPart WHERE Temp_PartID=@Temp_PartID;
		   END
		DROP TABLE #tmp_StockUpPart

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值