`
zheyiw
  • 浏览: 1020123 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

sql基础_一个典型的存储过程

    博客分类:
  • SQL
sql 
阅读更多
--存储过程
IF OBJECT_ID('spWII_Load','P') IS NOT NULL  
  DROP PROCEDURE [dbo].[spWII_Load]
GO 
SET  ANSI_NULLS ON;
GO
SET  QUOTED_IDENTIFIER ON;
GO

/* =======================
    描    述:在代码中启动事务 创建临时表, 然后在存储过程中处理临时表
             设计了  计数 ,临时表, 快速创建临时表, 插入表的方法, 更新表的方法,字符串格式化 等
    创 建 人:
    创建日期:
    说明: 调用本存储过程必须先建临时表 #tmp_TCTdetail ,并存入明细数据
    DECLARE @ResVal INT = -1;
    EXEC spWMS_LoadCarTranSubmit 'HK', '1', '1', '1', @ResVal OUTPUT
    select @ResVal
-- =======================*/
CREATE PROCEDURE [dbo].[spWII_Load]
  @CompanyID VARCHAR(20), @StockID VARCHAR(20), @PersonnelID VARCHAR(20), @Operator VARCHAR(20), @ResVal INT OUTPUT
AS
  BEGIN
    DECLARE @MaxBatchNo INT = 0;

    EXEC spCRM_GetMaxNum @ComCode = @CompanyID, @ObjID = 'WMS_LoadCarTranBatchNo', @MaxNum = @MaxBatchNo OUTPUT

    IF OBJECT_ID('tempdb.dbo.#tmp_TCTdetail') IS NULL
      BEGIN
        SET @ResVal = -1; --必须先建临时表再调用本存储过程

        RETURN;
      END

    --1,更新 seq
    UPDATE a
    SET    a.Seq = b.rowno
    FROM   #tmp_TCTdetail a
           INNER JOIN (SELECT row_number() OVER (ORDER BY getdate()) rowno, * FROM #tmp_TCTdetail) b
             ON a.BoxID = b.BoxID
             AND a.WaveBillNo = b.WaveBillNo
             AND a.SourceBillNo = b.SourceBillNo
             AND a.SourceBillTypeID = b.SourceBillTypeID

    --2,更新batchNo
    UPDATE #tmp_TCTdetail
    SET    BatchNo = @CompanyID + right(10000000000 + @MaxBatchNo, 10)

    --3,更新logid
    --3.1 得到主表
    SELECT   Cast('' AS VARCHAR(100)) LogID, WaveBillNo, SourceBillNo, SourceBillTypeID
    INTO     #tmp_TCTmaster
    FROM     #tmp_TCTdetail
    GROUP BY WaveBillNo, SourceBillNo, SourceBillTypeID

    --3.2 更新主表logid
    DECLARE @MaxLogID INT = 0;
    DECLARE @masterCount INT; --主表记录数
    SELECT @masterCount = count(logid) FROM #tmp_TCTmaster;
    EXEC spCRM_GetMaxNum @ComCode = @CompanyID, @ObjID = 'WMS_LoadCarTran', @AddNum = @masterCount, @MaxNum = @MaxLogID OUTPUT

    UPDATE a
    SET    a.LogID = @CompanyID + right(10000000000 + @MaxLogID + b.rowno - 1, 10)
    FROM   #tmp_TCTmaster a
           INNER JOIN (SELECT row_number() OVER (ORDER BY WaveBillNo) rowno, * FROM #tmp_TCTmaster) b
             ON a.WaveBillNo = b.WaveBillNo
             AND a.SourceBillNo = b.SourceBillNo
             AND a.SourceBillTypeID = b.SourceBillTypeID

    --3.3 插入主表
    INSERT INTO Wms_MaterialLoadCardTranMaster(CompanyID, LogID, BillTypeID, StockID, WaveBillNo, SourceBillNo, SourceBillTypeID,
                  PersonnelID, Operator, ModifyDTM, TaskStatus, Driver, CarCode, TransPers)
      SELECT @CompanyID, LogID, 'WMS_LoadCarTran', @StockID, WaveBillNo, SourceBillNo, SourceBillTypeID, @PersonnelID, @Operator,
             getdate(), '1', '', '', ''
      FROM   #tmp_TCTmaster

    --3.5 用主表logid 更新 明细表
    UPDATE a
    SET    a.LogID = b.LogID
    FROM   #tmp_TCTdetail a
           INNER JOIN #tmp_TCTmaster b
             ON a.WaveBillNo = b.WaveBillNo
             AND a.SourceBillNo = b.SourceBillNo
             AND a.SourceBillTypeID = b.SourceBillTypeID

    --3.6 插入明细表
    INSERT INTO Wms_MaterialLoadCardTranDetail(CompanyID, LogID, BoxID, BoxCode, Qty, ModifyDTM, Seq, Driver, CarCode, TransPers,
                  BatchNo                      )
      SELECT @CompanyID, LogID, BoxID, BoxCode, Qty, getdate(), Seq, Driver, CarCode, TransPers,
             BatchNo
      FROM   #tmp_TCTdetail

    DROP TABLE #tmp_TCTmaster

    DROP TABLE #tmp_TCTdetail

    SET @ResVal      = 1
  END





-- ======================= 存储过程的使用 =======================
  --从存储过程初始化临时表
  CREATE TABLE #storerSizeInv(
    StorerID VARCHAR(100), StorerCode VARCHAR(100), StorerTypeID VARCHAR(100), CardID VARCHAR(100), KindID VARCHAR(100),
    SeriesID VARCHAR(100), ModelID VARCHAR(100), ItemID VARCHAR(100), SeasonID VARCHAR(100), MaterialID VARCHAR(100),
    SizeID VARCHAR(100), CanMiscible VARCHAR(100), ExtentCode VARCHAR(100), StorerQty INT, Cubage VARCHAR(100),
    CurUsed VARCHAR(100), RowOver VARCHAR(100))

  --这里获取到 #storerSizeInv 中的  CardID, KindID, ModelID, SeasonID 都是储位的属性,本程序中没有用到
  INSERT INTO #storerSizeInv
  EXEC        spWms_Inv_xxx @CompanyID, @StockID, '', @SubAreaIDS


分享到:
评论

相关推荐

    MyQQ.rar_sql c_聊天 sql

    综上所述,“MyQQ.rar_sql_c_聊天_sql”这个项目涵盖了数据库设计、C语言编程和TCP网络通信等多个方面的知识,是构建一个具有聊天功能的应用程序的典型实例。在实际开发中,开发者需要综合运用这些技术,解决数据...

    SQLSERVER基础典型案例详解

    SQLSERVER基础典型案例详解 在IT领域,SQL Server是一款由微软公司开发的关系型数据库管理系统,广泛应用于数据存储、处理和分析。对于初学者来说,掌握SQL Server的基础知识是至关重要的,这包括了解SQL语言的基本...

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与...

    IBM DB2 SQL存储过程

    为了更好地理解和运用DB2 UDB for iSeries的相关特性,本书提供了一个示例模式,该模式包含了各种实体之间的关系及其实现细节,帮助读者掌握如何在实际场景中应用存储过程、触发器等功能。 #### 3. **Order Entry ...

    SQL_Server_2008基础教程_(11)

    存储过程是一个可重用的代码模块,可以高效率地完成指定的操作。触发器是一种特殊类型的存储过程,可以实现自动化的操作。用户定义函数是由用户根据应用程序的需要而定义的可以完成特定操作的函数。 本章将全面研究...

    SQL_Server_2000菜鸟入门.rar_SQL Server入门_sql

    SQL Server 2000是Microsoft公司推出的一款关系型数据库管理系统,对于初学者来说,它是学习数据库管理基础的优秀平台。在开始学习之前,理解SQL Server 2000的软硬件配置需求至关重要。 **一、软硬件配置要求** 1...

    MICROSOFT SQL SERVER 2008技术内幕:T-SQL语言基础.pdf

    存储过程是预先编译并存储在数据库中的一个或多个T-SQL语句,可以被客户端程序通过名称调用执行。触发器是一种特殊类型的存储过程,它会在数据表上发生数据修改事件(如INSERT、UPDATE或DELETE)时自动执行。 十、...

    SQLServer2000高级编程技术(part02)-想学存储过程 SQL编程 务必要看

    10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与...

    典型Sql练习题

    "典型Sql练习题"这个主题涵盖了从基础查询到复杂联接、子查询、存储过程等多个方面,旨在帮助C#、ASP.NET开发者以及数据库管理员(DBA)增强对SQL的理解和应用能力。 首先,基础的SQL查询包括SELECT语句,用于从...

    ASP+SQL Server 典型网站建设案例

    本案例主要探讨如何结合ASP和SQL Server构建一个完整的网站系统。在这样的系统中,ASP作为前端与用户交互,处理用户的请求,而SQL Server则在后台负责数据的存储和管理。以下将详细介绍这个案例中的关键知识点: 1....

    SQL_server_2000

    **一、SQL Server 2000安装过程详解** 1. **启动安装**:在Windows 2000 Advanced Server操作系统上,首先插入SQL Server 2000企业版的安装光盘,会弹出安装向导。选择“安装SQL Server 2000组件”,然后选择“安装...

    sql基础

    SQL基础是所有数据工作者必须掌握的关键技能,无论你是开发人员、数据分析师还是DBA。以下将详细介绍SQL的基础概念、语法以及常见操作。 1. **SQL简介**: SQL是由IBM的员工Raymond Boyce和Don Chamberlin于1974年...

    sql 存储过程

    一个典型的存储过程包括以下几个部分: - **创建存储过程**:使用`CREATE PROCEDURE`命令。 - **定义参数**:可以定义输入参数、输出参数或者两者兼有。 - **执行存储过程**:使用`EXECUTE`或`EXEC`命令来调用存储...

    SQL基础详解

    一个典型的RDBMS(关系型数据库管理系统)如MySQL、PostgreSQL、Oracle等,都遵循这些SQL语句的规则。在这些系统中,数据被存储在表中,表由列(字段)和行(记录)组成,每个表都有一个唯一标识的名字。 此外,...

    SQL2000SampleDb_msi与NorthWind安装方法.rar

    NorthWind是SQL Server中一个非常著名的示例数据库,它模拟了一个全球分销商的业务,包含了客户、订单、产品等典型的数据表。这个数据库设计得相当简洁,涵盖了多种常见的数据库操作场景,如CRUD(创建、读取、更新...

    省市区县基础数据(sql脚本格式)

    "省市区县基础数据(sql脚本格式)"这个资源就是一个典型的示例,它提供了中国行政区域划分的详细数据,以SQL脚本的形式存储。这样的数据对于构建地理位置相关的应用、统计分析或者数据分析系统非常有用。 首先,我们...

    SQL Server 2005应用开发技术与典型实例

    它不仅涵盖了SQL Server 2005的基础知识,还提供了丰富的典型实例,帮助读者在实践中掌握这一强大的数据管理工具。 SQL Server 2005是微软公司推出的一款企业级数据库管理系统,它在性能、安全性、可扩展性和可管理...

    ASP + SQL Server典型网站建设案例源码8个

    在这个典型的网站建设案例中,我们有8个不同的源码示例,这将帮助我们深入理解如何在实际项目中应用ASP和SQL Server。 1. **ASP基础概念** ASP是Web开发中的一个核心技术,它允许开发者在服务器端编写脚本,生成...

    DELL_MD3000环境下配SQL_SERVER_集群.doc

    在DELL MD3000环境下配置SQL SERVER集群是一项复杂而关键的任务,它涉及到硬件、存储设备、服务器操作系统和数据库软件的集成。本文档将详细介绍整个过程,分为四个主要部分:DELL MD3000磁阵的安装、DELL MD3000磁...

Global site tag (gtag.js) - Google Analytics