zoukankan      html  css  js  c++  java
  • sql 存储过程记录

    -- exec sp_helptext add_book1
    
    CREATE proc add_book1      --创建存储过程
    
     
    
     
    
     
    
    @DocCode VARCHAR(30)     --创建参数 
    
     
    
     
    
     
    
    as
    
     
    
    BEGIN
    
    INSERT INTO book_new_msg (
    
    book_num,
    
    book_msg,
    
    book_name,
    
    book_class,
    
    price,
    
    ware_people,
    
    Docdate,
    
    doctype
    
    )
    
     
    
     
    
    SELECT
    
    a.book_num,
    
    a.boo_msg,
    
    a.book_name,
    
    a.book_class,
    
    a.price,
    
    b.ware_people,
    
    b.DocDate,
    
    b.doctype
    
    FROM
    
    BOOK_MSG1 a
    
    INNER JOIN BOOK_WARE1 b ON a.DocCode = b.Doccode
    
    WHERE
    
    a.DocCode = @DocCode
    
     
    
     
    
    END
    
    BEGIN
    
    CREATE TABLE #T (book_num INT, book_sum INT)
    
    INSERT INTO #T (book_num, book_sum) 
    
    
    SELECT
    
    book_num,
    
    SUM (book_count)
    
    FROM
    
    book_msg1
    
    WHERE
    
    DocCode= @DocCode
    
    GROUP BY
    
    book_num 
    UPDATE a
    
    SET book_sum = ISNULL(a.book_sum, 0) + b.book_sum
    
    FROM
    
    book_sun a
    
    INNER JOIN #T b ON a.book_num = b.book_num 
     
    
    INSERT INTO book_sun (book_num, book_sum) SELECT
    
    a.book_num,
    
    a.book_sum
    
    FROM
    
    #t a
    
    LEFT JOIN book_sun b ON a.book_num = b.book_num
    
    WHERE
    
    ISNULL(b.book_num, '') = ''
    
    END
    View Code

     改 存储过程利用 inner join 和left join 减少了 if else 判断的操作提高了效率

    /*
    
        成品出货日期(取最早)对应 入库的时间
    
        fqh  2019-7-2
    
    */
    
    
    
    CREATE    PROCEDURE  USP_PROD_DELIVERY
    
    (
    
        @begindate        DATETIME,
    
        @enddate        DATETIME,
    
        @cltcodehd        VARCHAR(20)  = '',
    
        @cltnamehd        VARCHAR(100) = '',
    
        @stcodehd        VARCHAR(20)  = '',
    
        @stnamehd        VARCHAR(50)  = ''
    
    )
    
    AS
    
    BEGIN
    
    
    
    --返回表
    
    CREATE   TABLE  #T
    
    (
    
        lot_no            VARCHAR(20),
    
        style            VARCHAR(50),
    
        modelcode        VARCHAR(50),
    
        docdate            DATETIME,
    
        cltcode            VARCHAR(20),
    
        cltname            VARCHAR(100),
    
        stcode            VARCHAR(20),
    
        stname            VARCHAR(50),
    
        out_qty            INT,
    
        in_date            VARCHAR(10),
    
        in_qty            INT
    
    )
    
    CREATE  INDEX  IX_#T_LOT_NO        ON #T(LOT_NO)
    
    
    
    INSERT  INTO   #T(lot_no,docdate,stcode,out_qty,in_date,in_qty)
    
    
    
    SELECT
    
        m.refcodeitem,m.out_date,m.stcode,m.out_qty,n.periodid,n.in_qty
    
    FROM
    
    (
    
    -- 取出指令最早出库时间&累计出库数
    
    SELECT 
    
        b.refcodeitem,MIN(a.docdate) AS out_date,a.stcode,SUM(b.basedigit)  AS out_qty
    
    FROM        imatdochd        a WITH(NOLOCK)
    
    INNER  JOIN    imatdocitem        b WITH(NOLOCK)    ON a.doccode   = b.doccode
    
    WHERE 
    
            a.docdate    >= @begindate
    
        AND a.docdate   <= @enddate
    
        AND (@stcodehd    = ''  OR a.stcode = @stcodehd)
    
        AND (@cltcodehd = ''  OR a.cltcode = @cltcodehd) 
    
        AND a.formid     = 2444
    
        AND    a.docstatus  >= 250
    
        AND LEFT(b.refcodeitem,2) NOT IN('SC')
    
    GROUP BY b.refcodeitem,a.stcode    
    
    ) m
    
    INNER  JOIN 
    
    (
    
    -- 取出每次指令入库时间&数量
    
    SELECT 
    
        b.refcodeitem,a.periodid,a.stcode,SUM(b.basedigit)    AS  in_qty
    
    FROM
    
                imatdochd        a WITH(NOLOCK)
    
    INNER JOIN  imatdocitem        b WITH(NOLOCK)  ON a.doccode = b.doccode
    
    WHERE    
    
            a.formid        = 1001
    
        AND a.docstatus        >= 100
    
    GROUP BY b.refcodeitem,a.periodid,a.stcode
    
    ) n 
    
    ON  m.refcodeitem = n.refcodeitem AND m.stcode = n.stcode 
    
    
    
    
    
    UPDATE   a
    
    SET    modelcode     = b.modelcode,
    
           style         = b.style,
    
           cltname         = b.cltname
    
    FROM   #t  a INNER JOIN  proorderhd  b WITH(NOLOCK) ON a.lot_no = b.predoccode
    
    
    
    UPDATE  a
    
    SET    stname = b.stname
    
    FROM  #t a INNER JOIN  ostorage  b WITH(NOLOCK) ON a.stcode = b.stcode 
    
    
    
    
    
    
    
    SELECT  *FROM  #t ORDER BY docdate  ASC  
    
    
    
    DROP   TABLE  #T 
    
    END

    使用索引降低查询速度, 使用聚合函数 获取查询内容,  使用select 套select  加inner join 获取 链接数据

    update 修改 数据  ,利用     ''update set 字段=from  表  inner join 表 on 字段=字段''                 的方式 进行修改

    UPDATE  pc_forecast_mtl_type set  memo=(
    SELECT a.memo from   MTL_STORE_AGE_DETAIL_INPUT a INNER JOIN pc_forecast_mtl_type b
    on a.mtl_no=b.matcode ) ,
    plandate =(
    SELECT a.plandate from   MTL_STORE_AGE_DETAIL_INPUT a INNER JOIN pc_forecast_mtl_type b
    on a.mtl_no=b.matcode where a.mtl_no=b.matcode
    
    )  
    
    
    update  a
    set memo = b.memo
    from  pc_forecast_mtl_type a inner join MTL_STORE_AGE_DETAIL_INPUT b 
    on a.matcode = b.mtl_no 
    where a.matcode =b.mtl_no
    View Code

    insert into  select  的使用 

    INSERT INTO #t_mtl(vndcode,matcode)
    
    SELECT vndcode,matcode
    
    FROM proprice_sheet 
    
    WHERE (ISNULL(@vndcodehd,'') = '' OR vndcode = @vndcodehd)
    
      AND (ISNULL(@matcodehd,'') = '' OR matcode = @matcodehd)
    
      AND ISNULL(check_flag,0) = 1

    返回数据 类型结果

    /*
       替换核料单里成易料号 为 维涛料号
    */
    
    alter   PROCEDURE   USP_UPT_CY_MTL_NO
       @doccode      VARCHAR(20),
       @memo         VARCHAR(200)  OUTPUT
    AS
    BEGIN
    
    
    -- 把成易料号转成 维涛料号
    UPDATE  a 
    SET   matcode = b.matcode 
    FROM  probomitem  a   INNER JOIN  proimatgeneral b ON a.matcode = cy_code
    WHERE  a.doccode = @doccode
    
    
    --根据维涛料号取得 材料名称等资料
    UPDATE probomitem       
    SET   matname = b.matname,      
          colortext = b.color,      
          bomspecial = b.standardmode,      
          baseuom = b.uom,      
          uomrate = b.uomrate,      
          baseuomrate = b.baseuomrate      
    FROM probomitem a INNER JOIN proimatgeneral b ON a.matcode = b.matcode      
    WHERE a.doccode = @doccode 
    
    
    --取出成易料号无对应的维涛料号资料
    SELECT  @memo = STUFF((SELECT  DISTINCT ','+ a.matcode FROM probomitem a
                           LEFT  JOIN  proimatgeneral b WITH(NOLOCK) ON a.matcode = b.cy_code
                           WHERE doccode = @doccode
              AND ISNULL(b.matcode,'') = ''   for xml path('')),1,1,'')
    
    
    SET  @memo = @memo + ' 材料未编对应料号!'
    
    SELECT   @memo
    
    END
  • 相关阅读:
    FastDFS
    MYSQL日常操作
    SVN安装
    mysql主主配置
    MySQL优化
    nginx反向代理tomacat+keepalived实现动静分离、负载均衡、高可用
    nginx故障及处理
    nginx配置检测及安全配置
    nginx基本优化
    大金空调适配器
  • 原文地址:https://www.cnblogs.com/baili-luoyun/p/11101587.html
Copyright © 2011-2022 走看看