-- exec sp_helptext add_book1

CREATE proc add_book1      --创建存储过程

@DocCode VARCHAR()     --创建参数 

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, ) + 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

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

/*

    成品出货日期(取最早)对应 入库的时间

    fqh  2019-7-2

*/

CREATE    PROCEDURE  USP_PROD_DELIVERY

(

    @begindate        DATETIME,

    @enddate        DATETIME,

    @cltcodehd        VARCHAR()  = '',

    @cltnamehd        VARCHAR() = '',

    @stcodehd        VARCHAR()  = '',

    @stnamehd        VARCHAR()  = ''

)

AS

BEGIN

--返回表

CREATE   TABLE  #T

(

    lot_no            VARCHAR(),

    style            VARCHAR(),

    modelcode        VARCHAR(),

    docdate            DATETIME,

    cltcode            VARCHAR(),

    cltname            VARCHAR(),

    stcode            VARCHAR(),

    stname            VARCHAR(),

    out_qty            INT,

    in_date            VARCHAR(),

    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     = 

    AND    a.docstatus  >= 

    AND LEFT(b.refcodeitem,) 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        = 

    AND a.docstatus        >= 

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

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,) = 

返回数据 类型结果

/*
替换核料单里成易料号 为 维涛料号
*/ alter PROCEDURE USP_UPT_CY_MTL_NO
@doccode VARCHAR(),
@memo VARCHAR() 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('')),,,'') SET @memo = @memo + ' 材料未编对应料号!' SELECT @memo END

sql 存储过程记录的更多相关文章

  1. VBA 从sql存储过程-记录集-导入

    cnn.Open cnnstr cmd.ActiveConnection = cnn cmd.CommandTimeout = 120 cmd.CommandText = "dbo.t_bi ...

  2. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  3. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

  4. sql存储过程几个简单例子

    导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...

  5. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  6. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  7. 查询数据库后台Block 的Sql存储过程

    查询数据库后台Block 的Sql存储过程 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO /*记录SQL Server的阻塞情况 wang 200 ...

  8. SQL存储过程和函数

    SQL存储过程: 由来:在具体应用中,一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句.因此,mysql提供了数据库对象存储过程和函数. 定 ...

  9. 用SQL存储过程生成唯一单据号

    用SQL存储过程生成唯一单据号     在一些系统中,经理要生成单据号,为了不使多台客户端生成的单据号重复,一般要在服务端生成这种流水号,本文是在数据库中生成流水号,并且可以生成多种类型的单据号(比如 ...

随机推荐

  1. 剑指offer56:删除链表中重复的结点,排序的链表中,删除重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

    1 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处 ...

  2. js实现放烟花效果——点击处会从下向上升起烟花

    一个box中,点击其中的任意位置,会有烟花从正下方升起到点击处,并燃放出一圈圆形的烟花.代码如下: 首先是布局以及样式: <style> .box{ width: 1100px; heig ...

  3. 20191030-带返回值的回溯算法Leetcode解数独

    题目描述 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔 ...

  4. 20191011-构建我们公司自己的自动化接口测试框架-Config配置

    Config模块主要是为了存放的一些其他配置等的一个目录,当前目录存放日志配置文件 ################################################ [loggers] ...

  5. This is very likely to create a memory leak. Stack trace of thread错误分析

    1.问题描述 启动tomcat部署项目时,报This is very likely to create a memory leak. Stack trace of thread错误. 29-May-2 ...

  6. CMake入门-01-从HelloWorld开始

    工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 从 Hello,World! 开始 (1) 新建 hello 目录,创建文件 CMakeL ...

  7. 将mdf文件copy到docker对应的目录下

    将mdf文件copy到docker对应的目录下: (<Docker-Container ID> 需要整体替换) docker cp /Users/Jay/Works/db/MyPost.m ...

  8. python 解析Hdfs上的数据文件

    python想直接读取hadoop上的文件内容,一番操作,头发掉了几根,也没能解析出来parquet文件类型的文件. 本博文简单讲解一下TEXTFILE文件格式的解析: 需要安装模块hdfs from ...

  9. flask自有转换器:int、float、path。默认string

    flask自有转换器:int.float.path.默认string # 路由传递的参数默认当做string处理,这里指定int,尖括号中冒号后面的内容是动态的 # -*- coding: utf-8 ...

  10. jajx 传参 需要 判断的 条件

    1.有没有权限. 2.数据类型 对不对 例如 id ,page  传过来时是str 类型, view中处理时需要转换成 int类型. 如果 不能转 就会报错.. 3.查询数据.数据不存在也要报错... ...