备份BOM T-SQL

2023-11-16

转载请注明出处,联系我: t39q@163.com
本人热衷于数据库技术及算法的研究,志同道合之士, 欢迎探讨

ALTER PROC [dbo].[proc_BOM_VersionAutoUpgrade]
  @company NVARCHAR(20),
  @PartMtl NVARCHAR(50) --更改某個半成品後,影響到的其上層的半成品的料號,如果是成品下的,就不用升級
  as
 WITH r
 AS
  (
  SELECT 0 AS L,* FROM erp.PartMtl pm WHERE pm.PartNum=@PartMtl AND pm.Company=@company
  UNION ALL
  SELECT L+1 AS L,pm.* FROM r JOIN erp.PartMtl pm ON r.PartNum=pm.MtlPartNum AND r.Company = pm.Company
  )
  SELECT DISTINCT r.PartNum 
    INTO #NewVersion_0  --這個臨時表,用來生成每個物料新的版本號
    FROM r 
  left JOIN erp.Part p ON r.Company = p.Company AND r.PartNum = p.PartNum
  LEFT JOIN erp.PartClass pc ON p.Company = pc.Company AND p.ClassID = pc.ClassID
  WHERE p.ClassID IN ('F','Fx') AND r.Company=@company;;
 --AS0-3870RWFPA000-AY

  WITH r
  AS
  (
  SELECT 0 AS L,* FROM erp.PartMtl pm WHERE pm.PartNum=@PartMtl AND pm.Company=@company
  UNION ALL
  SELECT L+1 AS L,pm.* FROM r JOIN erp.PartMtl pm ON r.PartNum=pm.MtlPartNum AND r.Company = pm.Company
  )
  SELECT DISTINCT r.PartNum,r.RevisionNum 
    INTO #BOM_PartVersion  --新建了版本號,但是沒有新建BOM,用此表來找最新存在BOM的版本號
    FROM r 
  left JOIN erp.Part p ON r.Company = p.Company AND r.PartNum = p.PartNum
  LEFT JOIN erp.PartClass pc ON p.Company = pc.Company AND p.ClassID = pc.ClassID
  WHERE p.ClassID IN ('F','Fx') AND r.Company=@company;
 

  SELECT ROW_NUMBER() OVER (ORDER BY PartNum) ID, * INTO #NewVersion FROM #NewVersion_0 nv;
  
  ALTER TABLE #NewVersion ADD RevisionNum NVARCHAR(12);
  
  DECLARE @i INT=1,@n INT=0,@n2 INT=0,@PartNum NVARCHAR(50)='';
  DECLARE @RevisionNum NVARCHAR(12),@NewRevisionNum NVARCHAR(12);
  SELECT @n=COUNT(*) FROM #NewVersion nv;
  
  --SELECT * FROM #NewVersion nv;

  WHILE (@i<=@n)
  BEGIN
    SET @PartNum='';
    SELECT @PartNum=nv.PartNum FROM #NewVersion nv WHERE nv.ID=@i;
    --先生成新版本號的表,所有此種版本號都以CS開頭(表示報關的版本號)。
    set @n2=0;
    SELECT @n2=count(*) FROM erp.PartRev pr 
    WHERE pr.PartNum=@PartNum AND pr.Company=@company AND left(pr.RevisionNum,8)='CS'+CONVERT(varchar(20), GETDATE(), 12);
    SET @NewRevisionNum='';
    IF @n2=0 
    BEGIN  
    	 SELECT @NewRevisionNum='CS'+CONVERT(varchar(20), GETDATE(), 12)+'001';
       UPDATE #NewVersion SET RevisionNum=@NewRevisionNum where ID=@i;
    END
    ELSE
    BEGIN
    	 SELECT @NewRevisionNum='CS'+CONVERT(varchar(20), GETDATE(), 12)
        +right('000'+ rtrim(convert(char(3), convert(numeric, RIGHT('001',3)) +1)),3) 
        FROM erp.PartRev pr 
       WHERE pr.PartNum=@PartNum AND pr.Company=@company AND pr.RevisionNum LIKE 'CS%';
       UPDATE #NewVersion SET RevisionNum=@NewRevisionNum where ID=@i;
    END
    
    SET @RevisionNum='';

    DECLARE @ProdStandard DEC(18,8)=0;
    select @n2=COUNT(*) from tempdb.dbo.sysobjects 
      where id = object_id(N'tempdb..#NewBOM') AND [type]='U'

    IF @n2=0 
      BEGIN  
      	    SELECT @RevisionNum=pr.RevisionNum FROM erp.PartRev pr WHERE pr.Company=@company 
            AND pr.PartNum=@PartNum
            AND pr.EffectiveDate=(SELECT MAX(pr1.EffectiveDate) FROM erp.PartRev pr1 
                WHERE pr1.Company=@company AND pr1.PartNum=@PartNum AND pr1.PartNum+pr1.RevisionNum
              in(SELECT bpv.PartNum+bpv.RevisionNum FROM #BOM_PartVersion bpv));

            --找一下BOM裡面最新版本對應的成品裝配的產量ProdStandard
            --此處的假設是,新建了成品的BOM版本,就新建了對應版本的BOM結構
            SET @n2=0;
            SELECT @ProdStandard=min(e.ProdStandard),@n2=COUNT(*) FROM erp.ECOOpr e 
            WHERE e.PartNum=@PartNum AND e.Company=@company AND e.RevisionNum=@RevisionNum;
            IF @n2=0 
            BEGIN  
                PRINT @PartNum+','+@RevisionNum+N'沒有此版本的BOM結構';	
                SET @i=@i+1;
                CONTINUE;
            END;
            
            --Company	Status	EPIGroup	PartNum	partname	RevisionNum	Level	MtlSeq	MtlPartNum	partname2	RelatedOperation	QtyPer	
            --UOMCode	EstScrap	EstScrapType	FixedQty	ViewAsASM	PullAsAsm	OprSeq	OpCode	OpDesc	ProdStandard
            with r
            AS
            (SELECT 1 AS L,* from Erp.PartMtl pm WHERE pm.PartNum=@PartNum AND pm.RevisionNum=@RevisionNum
               --UNION ALL --只更新首層半成品號
             --SELECT L+1 AS L,pm.* FROM r JOIN erp.PartMtl pm ON r.Company = pm.Company AND r.MtlPartNum=pm.PartNum
             )
             SELECT @company Company,@PartNum ECOGroupID,r.PartNum PartNum
             ,@NewRevisionNum RevisionNum,MtlSeq,MtlPartNum,RelatedOperation
             ,QtyPer,UOMCode,EstScrap,EstScrapType,FixedQty,ViewAsAsm,PullAsAsm,10 OprSeq,'AS010' OpCode,N'成品裝備' OpDesc
             ,@ProdStandard ProdStandard INTO #NewBOM FROM r
             left JOIN erp.Part p ON r.Company = p.Company AND r.PartNum = p.PartNum
             LEFT JOIN erp.Part p1 ON r.Company = p1.Company AND r.MtlPartNum=p1.PartNum;
      END
      ELSE
      BEGIN
      	    SELECT @RevisionNum=pr.RevisionNum FROM erp.PartRev pr WHERE pr.Company=@company 
            AND pr.PartNum=@PartNum
            AND pr.EffectiveDate=(SELECT MAX(pr1.EffectiveDate) FROM erp.PartRev pr1 
                WHERE pr1.Company=@company AND pr1.PartNum=@PartNum AND pr1.PartNum+pr1.RevisionNum
              in(SELECT bpv.PartNum+bpv.RevisionNum FROM #BOM_PartVersion bpv));

            --找一下BOM裡面最新版本對應的成品裝配的產量ProdStandard
            --此處的假設是,新建了成品的BOM版本,就新建了對應版本的BOM結構
            SET @n2=0;
            SELECT @ProdStandard=min(e.ProdStandard),@n2=COUNT(*) FROM erp.ECOOpr e 
            WHERE e.PartNum=@PartNum AND e.Company=@company AND e.RevisionNum=@RevisionNum;
            IF @n2=0 
            BEGIN  
                PRINT @PartNum+','+@RevisionNum+N'沒有此版本的BOM結構';	
                SET @i=@i+1;
                CONTINUE;
            END;

            --Company	Status	EPIGroup	PartNum	partname	RevisionNum	Level	MtlSeq	MtlPartNum	partname2	RelatedOperation	QtyPer	
            --UOMCode	EstScrap	EstScrapType	FixedQty	ViewAsASM	PullAsAsm	OprSeq	OpCode	OpDesc	ProdStandard
            with r
            AS
            (SELECT 1 AS L,* from Erp.PartMtl pm WHERE pm.PartNum=@PartNum AND pm.RevisionNum=@RevisionNum
               --UNION ALL
             --SELECT L+1 AS L,pm.* FROM r JOIN erp.PartMtl pm ON r.Company = pm.Company AND r.MtlPartNum=pm.PartNum
             )
             INSERT INTO #NewBOM SELECT @company Company,@PartNum ECOGroupID,r.PartNum PartNum
             ,@NewRevisionNum RevisionNum,MtlSeq,MtlPartNum,RelatedOperation
             ,QtyPer,UOMCode,EstScrap,EstScrapType,FixedQty,ViewAsAsm,PullAsAsm,10 OprSeq,'AS010' OpCode,N'成品裝備' OpDesc
             ,@ProdStandard ProdStandard FROM r
             left JOIN erp.Part p ON r.Company = p.Company AND r.PartNum = p.PartNum
             LEFT JOIN erp.Part p1 ON r.Company = p1.Company AND r.MtlPartNum=p1.PartNum;
      END
      

    SET @i=@i+1;
  END
  --Company	PartNum	RevisionNum	RevShortDesc	RevDescription	Approved	ApprovedDate	ApprovedBy	EffectiveDate	DrawNum	AltMethod	Plant
  --要更新的成品版本 
  SELECT @company Company,nv.PartNum,RevisionNum,RevisionNum RevShortDesc,RevisionNum RevDescription
    ,CAST(1 AS BIT) Approved,CONVERT(varchar(20), GETDATE(), 23) ApprovedDate
  ,'CME0001' ApprovedBy,CONVERT(varchar(20), GETDATE(), 23) EffectiveDate,'' DrawNum,'' AltMethod,'MfgSys' Plant  FROM #NewVersion nv;


    SELECT nb.Company
        ,nb.ECOGroupID
        ,nb.PartNum
        ,nb.RevisionNum
        ,nb.OprSeq
        ,nb.OpCode
        ,nb.OpDesc
        ,nb.ProdStandard FROM #NewBOM nb; --MOM

  SELECT nb.Company
        ,nb.ECOGroupID
        ,nb.PartNum
        ,nb.RevisionNum
        ,nb.MtlSeq
        ,nb.MtlPartNum
        ,nb.RelatedOperation
        ,nb.QtyPer
        ,nb.UOMCode
        ,nb.EstScrap
        ,nb.EstScrapType
        ,nb.FixedQty
        ,nb.ViewAsAsm
        ,nb.PullAsAsm
 FROM #NewBOM nb; --BOM



  
 DROP TABLE #NewBOM;
 DROP TABLE #NewVersion_0;
 DROP TABLE #NewVersion;
 DROP TABLE #BOM_PartVersion;
 
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

备份BOM T-SQL 的相关文章

  • 常用中间件启动脚本

    ActiveMQ bin bash description activemq ACTIVEMQ PATH usr local activemq export JAVA HOME usr java jdk1 8 0 241 amd64 cas
  • MySQL字段类型详解

    http www chinaz com program 2009 0105 59154 shtml MySQL支持大量的列类型 它可以被分为3类 数字类型 日期和时间类型以及字符串 字符 类型 本节首先给出可用类型的一个概述 并且总结每个列
  • 联盟链战国:五大巨头横向对比

    联盟链是目前区块链落地实践的热点 也是大家对 杀手级应用 期望最大的区块链部署形态 联盟链的诞生源于对区块链技术的 反思 是对比特币 以太坊所体现的技术特点与企业客户实际需要的融合与折衷 蕴含了大量区块链工作者的智慧与辛劳 由于对未来价值的
  • Node.js

    修改软件安装的路径 此电脑右击 属性 高级系统设置 环境变量 选中path 编辑 修改路径 确定 定义区别 一 浏览器中的JS 1 浏览器中的JS组成 JS核心语法 ECMAScript 和 WebAPI 浏览器内置的API 2 为什么Ja

随机推荐

  • 在cms以及kindeditor中插入百度动态地图的方法

    想在网页中插入动态地图不难 直接打开网址http api map baidu com lbsapi creatmap 然后按照提示操作 最终生成脚本 放到html文件中即可 而在kindeditor中插入动态地图就更简单了 最新版的kind
  • 部分和问题(c/c++)

    给定整数a1 a2 a3 an 判断是否可以从中 选出若干输使得它们的和恰好为k 第一行输入n代表几个数字 第二行输入数字 第三行输入结果 样例 4 1 2 4 7 13 yes 这是一道基础题 对于初学者而言使用两重循环无疑是最便捷的 i
  • 路由器与交换机的基本工作原理

    本文介绍路由器与交换机的基本工作原理 在介绍这之前先来看一下OSI七层工作模型 现在开始解释路由器的作用及其基本工作原理 路由器的作用 1 异种网络互连 比如具有异种子网协议的网络互连 2 子网协议转换 不同子网间包括局域网和广域网之间的协
  • 论文排版:Word加入脚注后,分栏的正文就跑到下一页上去了的解决方案

    在论文排版中 在题目或作者处插入了脚注后 再对正文分栏时 或者先分栏 再在题目或作者处插入脚注 分栏后的正文就跑到下一页上去了 这个问题 我抓狂了很久 终于在搜索若干关键字后得以解决 情况一 稿件格式的要求 1 题目和摘要部分不分栏 正文部
  • 【架构】1.2浅谈架构基础-架构设计的目的

    架构设计的目的 架构设计的目的 软件发展历程 如何识别软件的复杂度 高性能 高可用 可扩展 成本价值 安全因素 架构设计的目的 谈及架构设计 应该IT从业者都很经常听到 然而对于架构设计的目的 可能每个人都有自己的理解 例如 因为现在的系统
  • 毕业设计 opencv图像增强算法系统

    文章目录 0 简介 1 基于直方图均衡化的图像增强 2 基于拉普拉斯算子的图像增强 4 基于伽马变换的图像增强 软件实现效果 最后 0 简介 今天学长向大家分享一个毕业设计项目 毕业设计 opencv图像增强算法系统 项目运行效果 毕业设计
  • 8个不可不知的Mac OS X专用命令行工具

    本文转载至 https segmentfault com a 1190000000509514 OS X的终端下通用很多Unix的工具和脚本 如果从Linux迁移到OS X会发现很多熟悉的命令和脚本工具 其实并没有任何区别 但是OS X也提
  • Clamav杀毒软件源码分析笔记[十]

    Clamav杀毒软件源码分析笔记 十 刺猬 http blog csdn net littlehedgehog 客户端处理 服务端已经把主要的工作都已经处理的差不多了 剩下来也就是服务端等待客户端提出请求 然后根据客户端的请求做相应的工作
  • sql注入绕过技巧

    前言 今天斗胆来整理一下sql注入的各种绕过姿势 以后方便查阅 SQL注入的绕过技巧有很多 具体的绕过技巧需要看具体的环境 而且很多的绕过方法需要有一个实际的环境 最好是你在渗透测试的过程中遇到的环境 否则如果仅仅是自己凭空想 那显然是不靠
  • C语言项目——学生信息管理系统

    文章目录 学生信息管理系统 一 项目思路 1 模块化思想 2 流程图 二 功能框架 1 系统菜单 2 其他功能 三 分布实现 0 学生属性 系统属性 1 学生属性 2 系统属性 1 创建系统 2 绘制菜单 3 按键操作 4 录入信息 5 浏
  • 等精度测频原理--频率计

    等精度测频原理 频率计 本系统采用等精度测频的原理来测量频率 其原理如图2所示 图2 等精度测频原理图 图2中的门控信号是可预置的宽度为Tpr的一个脉冲 CNT1和CNT2是两个可控计数器 标准频率信号从CNT1的时钟输入端FS输入 其频率
  • 常见的几种矩阵分解方式

    项目github地址 bitcarmanlee easy algorithm interview and practice 欢迎大家star 留言 一起学习进步 1 三角分解 LU分解 矩阵的LU分解是将一个矩阵分解为一个下三角矩阵与上三角
  • H5浏览器播放RTMP直播流

  • Python编程快速上手

    题目1 编写一个名为collatz 的函数 它有一个名为number的参数 如果参数是偶数 那么collatz 就打印出number 2 如果number是奇数 collatz 就打印3 number 1 def collatz numbe
  • 面试题 ⑥

    1 Java常见的线程池有哪些 它们的使用场景 newSingleThreadExecutor 创建一个单线程的线程池 此线程池保证所有的执行顺序按照任务的提交顺序执行 FIFO 适合顺序处理文件日志等 newFixedThreadPool
  • easyUI datagrid中checkbox选中事件以及行点击事件,翻页之后还可以选中

    DataGrid其中与选择 勾选相关 DataGrid属性 singleSelect boolean 如果为true 则只允许选择一行 false ctrlSelect boolean 在启用多行选择的时候允许使用Ctrl键 鼠标点击的方式
  • MySQL主从复制(Master-Slave)实践

    转载自 https www cnblogs com gl developer p 6170423 html 参考 https blog csdn net lildkdkdkjf article details 10004663 MySQL数
  • Python的pickle模块详解(包括优缺点及和JSON的区别)

    文章目录 一 pickle是什么 1 pickle的优缺点 2 pickle和JSON的区别 3 pickle的应用总结 二 pickle的用法 1 pickle接口 2 pickle实例 结语 一 pickle是什么 在英语中 pickl
  • 批处理一键关闭危险端口(135 137 138 139 445)预防勒索病毒

    一键关闭危险端口 bat echo off color 1f title 关闭常见的危险端口 echo 正在开启Windows防火墙 echo netsh advfirewall set currentprofile state on gt
  • 备份BOM T-SQL

    转载请注明出处 联系我 t39q 163 com 本人热衷于数据库技术及算法的研究 志同道合之士 欢迎探讨 ALTER PROC dbo proc BOM VersionAutoUpgrade company NVARCHAR 20 Par