物料清单应用输入模板的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是一个临时表

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

相关文章
|
2月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
2月前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
76 0
|
2月前
|
Java 前端开发 容器
Struts 2:在技术变革的风暴中航行,探索框架的革命性未来与创新融合之路
【8月更文挑战第31天】Struts 2作为一款成熟的企业级Java Web框架,凭借其稳定性和灵活性自2007年以来广受欢迎。它基于MVC设计模式,支持插件架构和RESTful服务,并能与Spring框架良好集成。然而,面对微服务架构和容器化技术(如Docker和Kubernetes)的兴起,Struts 2需提供更轻量级和支持指南来适应变化。通过深化与现代前端框架(如React和Vue.js)及AI技术的集成,并强化安全性与开发工具,Struts 2有望保持竞争力并迎接未来挑战。
36 0
|
2月前
|
SQL 测试技术 数据处理
|
2月前
|
SQL 数据采集 数据挖掘
深入理解SQL中的DISTINCT语句及其应用
【8月更文挑战第31天】
42 0
|
2月前
|
存储 SQL 数据库
如何使用 SQL Server 创建存储过程?
【8月更文挑战第31天】
65 0
|
2月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
34 0
|
2月前
|
SQL 数据管理 关系型数据库
SQL与云计算:利用云数据库服务实现高效数据管理——探索云端SQL应用、性能优化、安全性与成本效益,为企业数字化转型提供全方位支持
【8月更文挑战第31天】在数字化转型中,企业对高效数据管理的需求日益增长。传统本地数据库存在局限,而云数据库服务凭借自动扩展、高可用性和按需付费等优势,成为现代数据管理的新选择。本文探讨如何利用SQL和云数据库服务(如Amazon RDS、Google Cloud SQL和Azure SQL Database)实现高效的数据管理。通过示例和最佳实践,展示SQL在云端的应用、性能优化、安全性及成本效益,助力企业提升竞争力。
45 0
|
2月前
|
SQL 监控 关系型数据库
"SQL性能瓶颈大揭秘:一步步教你揪出慢查询元凶,从根源解决数据库拖沓问题,让应用速度飞起来!"
【8月更文挑战第31天】作为一名数据库管理员或开发者,面对复杂系统时,运行缓慢的SQL查询常常令人头疼。本文将指导你如何诊断并解决这些问题。首先,通过性能监控工具识别出问题查询;其次,利用`EXPLAIN`分析其执行计划,了解索引使用情况;接着,优化查询语句,如使用合适索引、减少JOIN操作等;再者,优化数据库设计,采用分区表或调整硬件资源;最后,持续监控性能并调优。通过这些步骤,可有效提升数据库的整体性能。
31 0
|
2月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
41 0
下一篇
无影云桌面