物料清单应用输入模板的SQL存储过程设计

简介: 物料清单应用输入模板的SQL存储过程设计

物料清单输入时,可以按产品类别建模板,也可以用已经建立清单的相似产品的清单做为模板。

本例通过计算当前产品与原有清单产品的相似度,自动初始化一个产品的新建清单数据。

用到表结构:

物料清单表MLQD字段列表:
QDID      int           4 清单序号          TextEdit          
CPCHXH    varchar      20 产品货号          TextEdit     00000
CPCHDH    varchar      30 产品代号          TextEdit          
JGDH      varchar      30 结构代号          TextEdit          
JC        int           4 级次            TextEdit          
CHXH      varchar      20 货号            ButtonEdit          
CHDH      varchar      30 存货代号          ButtonEdit          
CHMC      nvarchar    100 存货名称          TextRead          
XH1       nvarchar    100 型号            ButtonEdit          
XH2       nvarchar    100 规格            TextEdit          
XH3       nvarchar    400 参数            TextEdit          
GG1       nvarchar    100 颜色            ComboEdit     EDIT
GG2       nvarchar    100 材质            TextEdit          
GG3       nvarchar    100 图号            TextEdit          
JLDW      nvarchar    100 计量单位          TextRead          
CLLB      nvarchar     20 材料类别          TextRead          
DESL      decimal       9 定额数量          TextEdit  0.0000;-0,0000;#
DESH      decimal       9 定额损耗          TextEdit  0.00;-0,00;#
WLDW      nvarchar    200 往来单位          ButtonEdit          
SCBM      nvarchar    100 生产部门          TextEdit          
CKMC      nvarchar    100 仓库名称          ListEdit          
JSJD      int           4 计算精度          TextEdit          
HH        int           4 行号            TextEdit          
RQ        date          3 日期            DateEdit  yyyy-MM-dd
SFSH      bit           1 是否审核          CheckEdit         
SHRY      nvarchar     40 审核人员          TextEdit     
物料清单模板MLQDMB字段列表:
JGDH      varchar      30 结构代号          TextEdit          
SJDH      varchar      30 上级代号          TextEdit          
BJDH      varchar      30 本级代号          TextEdit          
JC        int           4 级次            TextEdit          
CPCHDH    varchar      30 产品代号          ButtonEdit          
CHDH      varchar      30 存货代号          ButtonEdit          
CHMC      nvarchar    100 存货名称          TextRead          
XH1       nvarchar    100 型号            ButtonEdit          
XH2       nvarchar    100 规格            TextRead          
XH3       nvarchar    400 参数            ComboEdit     EDIT
GG1       nvarchar    100 颜色            ComboEdit     EDIT
GG2       nvarchar    100 材质            TextEdit          
GG3       nvarchar    100 图号            TextEdit          
JLDW      nvarchar     40 计量单位          TextRead          
CLLB      nvarchar     20 材料类别          TextRead          
DESL      decimal       9 定额数量          TextEdit    0.0000
DESH      decimal       9 定额损耗          TextEdit  0.00;0,00;#
JSJD      int           4 计算精度          TextEdit          
SFQY      bit           1 是否启用          CheckEdit     

存储过程代码:

ALTER PROCEDURE [dbo].[X9_GLSRMB]
   (@DQYH  NVARCHAR(10),  --用户名称
  @FMNAME  NVARCHAR(30),  --窗口名称
  @TBNAME  NVARCHAR(30),  --数据表名称
  @GLXH  NVARCHAR(30),  --目录主表编码
  @TJSTR  NVARCHAR(MAX))  --条件字符串
AS
BEGIN
  DECLARE @CPCHDH VARCHAR(30);
  DECLARE @CPCHXH INT;
  DECLARE @XH1 NVARCHAR(50),@XH2 NVARCHAR(50),@XH3 NVARCHAR(50);
  DECLARE @GG1 NVARCHAR(50),@GG2 NVARCHAR(50),@GG3 NVARCHAR(50);
  DECLARE @XSCPCHXH INT,@MAXXSCD INT;   --相似产品存货序号 
  SELECT @CPCHDH=CHDH,@CPCHXH=CHXH,@XH1=XH1,@XH2=XH2,@XH3=XH3,@GG1=GG1,@GG2=GG2,@GG3=GG3 FROM MLCHXM 
    WHERE CHXH=CONVERT(INT,@GLXH);
  SET @XSCPCHXH=0;
  SET @MAXXSCD=0;
  --相似清单 产品序号,相似程度
  --下列WITH语句中的 1 可以改为大小不同的参数,以计算合适的相似程度
  WITH XSQD (CPCHXH,XSCD) AS
  (SELECT CPCHXH,
    (CASE WHEN XH1=@XH1 AND XH1<>'' THEN 1 ELSE 0 END)+
    (CASE WHEN XH2=@XH2 AND XH2<>'' THEN 1 ELSE 0 END)+
    (CASE WHEN XH3=@XH3 AND XH3<>'' THEN 1 ELSE 0 END)+
    (CASE WHEN GG1=@GG1 AND GG1<>'' THEN 1 ELSE 0 END)+
    (CASE WHEN GG2=@GG2 AND GG2<>'' THEN 1 ELSE 0 END)+
    (CASE WHEN GG3=@GG3 AND GG3<>'' THEN 1 ELSE 0 END) as XSCD
  FROM MLQD WHERE CPCHDH =@CPCHDH AND JC=1)
  SELECT @XSCPCHXH=CPCHXH FROM XSQD WHERE XSCD = (SELECT MAX(XSCD) FROM XSQD);
  IF @XSCPCHXH >0
    BEGIN
      SELECT JGDH, JC, CPCHDH,CHDH, CHMC,
          @XH1 AS XH1, @XH2 AS XH2, @XH3 AS XH3, 
          @GG1 AS GG1, @GG2 AS GG2, @GG3 AS GG3, 
          JLDW, CLLB, DESL,DESH, JSJD
        FROM MLQD
        WHERE (JC = 1) AND (CPCHXH = @XSCPCHXH)
      UNION ALL     
      SELECT JGDH, JC, CPCHDH,CHDH, CHMC,
          XH1, XH2, XH3, GG1, GG2, GG3, 
          JLDW, CLLB, DESL,DESH, JSJD 
        FROM MLQD
        WHERE (JC > 1) AND (CPCHXH = @XSCPCHXH) ORDER BY JGDH;
    END
  ELSE  
    BEGIN
      DECLARE @JGDH VARCHAR(30),@CHDH VARCHAR(30),@JC VARCHAR(30),@DESL DECIMAL(18,6),@XH INT;
      SET @XH=1;  --循环变量
      DELETE MLQDMBLSB WHERE YHMC=@DQYH; 
      INSERT INTO MLQDMBLSB (YHMC,CPCHXH,JGDH,SJDH,BJDH,JC,CPCHDH,CHDH,CHMC,
          XH1,XH2,XH3,GG1,GG2,GG3,JLDW,CLLB,DESL,DESH,JSJD) 
        SELECT @DQYH AS YHMC,@CPCHXH AS CPCHXH,JGDH,SJDH,BJDH,JC,CPCHDH,CHDH,CHMC,
          @XH1 AS XH1, @XH2 AS XH2, @XH3 AS XH3, 
          @GG1 AS GG1, @GG2 AS GG2, @GG3 AS GG3, 
          JLDW, CLLB, DESL,DESH, JSJD 
        FROM MLQDMB
        WHERE (JC = 1) AND CPCHDH =@CPCHDH;
      INSERT INTO MLQDMBLSB (YHMC,CPCHXH,JGDH,SJDH,BJDH,JC,CPCHDH,CHDH,CHMC,
          XH1,XH2,XH3,GG1,GG2,GG3,JLDW,CLLB,DESL,DESH,JSJD) 
        SELECT @DQYH AS YHMC,@CPCHXH AS CPCHXH,JGDH,SJDH,BJDH,JC,CPCHDH,CHDH,CHMC,
          XH1, XH2, XH3, GG1, GG2, GG3, 
          JLDW, CLLB, DESL,DESH, JSJD 
        FROM MLQDMB
        WHERE (JC > 1) AND CPCHDH =@CPCHDH;
      WHILE @XH=1
        BEGIN
          IF EXISTS(SELECT * FROM MLQDMBLSB WHERE CLLB='子件')
            BEGIN
              DECLARE QDMB_cursor CURSOR FOR
                  SELECT  JGDH,CHDH,JC,DESL
                  FROM    MLQDMBLSB 
                  WHERE    CLLB='子件'
                OPEN QDMB_cursor;
                FETCH FROM QDMB_cursor
                  INTO @JGDH,@CHDH,@JC,@DESL;
                WHILE @@FETCH_STATUS=0
                  BEGIN
                    INSERT INTO MLQDMBLSB (YHMC,CPCHXH,JGDH,SJDH,BJDH,JC,CPCHDH,CHDH,CHMC,
                        XH1,XH2,XH3,GG1,GG2,GG3,JLDW,CLLB,DESL,DESH,JSJD) 
                      SELECT @DQYH AS YHMC,@CPCHXH AS CPCHXH,@JGDH+RIGHT(JGDH,LEN(JGDH)-LEN(@CHDH)) AS JGDH,
                        SJDH,BJDH,@JC+JC-1 AS JC,@CPCHDH AS CPCHDH,CHDH,CHMC,
                        XH1, XH2, XH3, GG1, GG2, GG3, 
                        JLDW, CLLB, @DESL*DESL,DESH, JSJD 
                      FROM MLQDMB
                      WHERE CPCHDH=@CHDH AND JGDH<>@CHDH;
                    UPDATE MLQDMBLSB SET CLLB='自制' WHERE JGDH=@JGDH;
                    FETCH NEXT FROM QDMB_cursor
                      INTO  @JGDH,@CHDH,@JC,@DESL;
                  END
              CLOSE QDMB_cursor;
              DEALLOCATE QDMB_cursor  ;
            END
          ELSE
            BEGIN
              SET @XH=0;
            END
        END
      SELECT JGDH, JC, CPCHDH, CHDH, CHMC, XH1, XH2, XH3, GG1, GG2, GG3, JLDW, CLLB, DESL, DESH,JSJD 
        FROM  MLQDMBLSB WHERE     (CPCHXH = @CPCHXH) AND (YHMC = @DQYH) ORDER BY JGDH;
    END   
  RETURN;

代码中的XH1,XH2,XH3,GG1,GG2,GG3为用户可定义的规格型号类字段。MLQDMBLSB是一个临时表

代码中还包括了子清单(子件)的合并处理。有些系统子件是分开处理的,合并的好处是降低了需要计算的复杂程度。

相关文章
|
1月前
|
SQL 存储 测试技术
SQL在构建系统中的应用:关键步骤与技巧
在构建基于数据库的应用系统时,SQL(Structured Query Language)作为与数据库交互的核心语言,扮演着至关重要的角色
|
6天前
|
SQL 数据库
如何应用SQL约束条件?
【10月更文挑战第28天】如何应用SQL约束条件?
21 11
|
25天前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
27天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
28天前
|
SQL 存储 数据库
SQL在构建系统中的应用:关键要素与编写技巧
在构建基于数据库的系统时,SQL(Structured Query Language)扮演着至关重要的角色
|
1月前
|
SQL 关系型数据库 数据库
SQL数据库:核心原理与应用实践
随着信息技术的飞速发展,数据库管理系统已成为各类组织和企业中不可或缺的核心组件。在众多数据库管理系统中,SQL(结构化查询语言)数据库以其强大的数据管理能力和灵活性,广泛应用于各类业务场景。本文将深入探讨SQL数据库的基本原理、核心特性以及实际应用。一、SQL数据库概述SQL数据库是一种关系型数据库
36 5
|
30天前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
44 3
|
1月前
|
SQL
sql树型应用总结
sql树型应用总结
28 2
|
26天前
|
SQL 数据库 索引
内连接(INNER JOIN)在SQL中的简单应用与技巧
在SQL查询中,内连接(INNER JOIN)是一种基本且常用的连接类型,用于从两个或多个表中检索匹配的记录
|
3月前
|
Java 前端开发 容器
Struts 2:在技术变革的风暴中航行,探索框架的革命性未来与创新融合之路
【8月更文挑战第31天】Struts 2作为一款成熟的企业级Java Web框架,凭借其稳定性和灵活性自2007年以来广受欢迎。它基于MVC设计模式,支持插件架构和RESTful服务,并能与Spring框架良好集成。然而,面对微服务架构和容器化技术(如Docker和Kubernetes)的兴起,Struts 2需提供更轻量级和支持指南来适应变化。通过深化与现代前端框架(如React和Vue.js)及AI技术的集成,并强化安全性与开发工具,Struts 2有望保持竞争力并迎接未来挑战。
47 0

热门文章

最新文章