--存储过程
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”这个项目涵盖了数据库设计、C语言编程和TCP网络通信等多个方面的知识,是构建一个具有聊天功能的应用程序的典型实例。在实际开发中,开发者需要综合运用这些技术,解决数据...
SQLSERVER基础典型案例详解 在IT领域,SQL Server是一款由微软公司开发的关系型数据库管理系统,广泛应用于数据存储、处理和分析。对于初学者来说,掌握SQL Server的基础知识是至关重要的,这包括了解SQL语言的基本...
10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与...
为了更好地理解和运用DB2 UDB for iSeries的相关特性,本书提供了一个示例模式,该模式包含了各种实体之间的关系及其实现细节,帮助读者掌握如何在实际场景中应用存储过程、触发器等功能。 #### 3. **Order Entry ...
存储过程是一个可重用的代码模块,可以高效率地完成指定的操作。触发器是一种特殊类型的存储过程,可以实现自动化的操作。用户定义函数是由用户根据应用程序的需要而定义的可以完成特定操作的函数。 本章将全面研究...
SQL Server 2000是Microsoft公司推出的一款关系型数据库管理系统,对于初学者来说,它是学习数据库管理基础的优秀平台。在开始学习之前,理解SQL Server 2000的软硬件配置需求至关重要。 **一、软硬件配置要求** 1...
存储过程是预先编译并存储在数据库中的一个或多个T-SQL语句,可以被客户端程序通过名称调用执行。触发器是一种特殊类型的存储过程,它会在数据表上发生数据修改事件(如INSERT、UPDATE或DELETE)时自动执行。 十、...
10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与...
"典型Sql练习题"这个主题涵盖了从基础查询到复杂联接、子查询、存储过程等多个方面,旨在帮助C#、ASP.NET开发者以及数据库管理员(DBA)增强对SQL的理解和应用能力。 首先,基础的SQL查询包括SELECT语句,用于从...
本案例主要探讨如何结合ASP和SQL Server构建一个完整的网站系统。在这样的系统中,ASP作为前端与用户交互,处理用户的请求,而SQL Server则在后台负责数据的存储和管理。以下将详细介绍这个案例中的关键知识点: 1....
**一、SQL Server 2000安装过程详解** 1. **启动安装**:在Windows 2000 Advanced Server操作系统上,首先插入SQL Server 2000企业版的安装光盘,会弹出安装向导。选择“安装SQL Server 2000组件”,然后选择“安装...
SQL基础是所有数据工作者必须掌握的关键技能,无论你是开发人员、数据分析师还是DBA。以下将详细介绍SQL的基础概念、语法以及常见操作。 1. **SQL简介**: SQL是由IBM的员工Raymond Boyce和Don Chamberlin于1974年...
一个典型的存储过程包括以下几个部分: - **创建存储过程**:使用`CREATE PROCEDURE`命令。 - **定义参数**:可以定义输入参数、输出参数或者两者兼有。 - **执行存储过程**:使用`EXECUTE`或`EXEC`命令来调用存储...
一个典型的RDBMS(关系型数据库管理系统)如MySQL、PostgreSQL、Oracle等,都遵循这些SQL语句的规则。在这些系统中,数据被存储在表中,表由列(字段)和行(记录)组成,每个表都有一个唯一标识的名字。 此外,...
NorthWind是SQL Server中一个非常著名的示例数据库,它模拟了一个全球分销商的业务,包含了客户、订单、产品等典型的数据表。这个数据库设计得相当简洁,涵盖了多种常见的数据库操作场景,如CRUD(创建、读取、更新...
"省市区县基础数据(sql脚本格式)"这个资源就是一个典型的示例,它提供了中国行政区域划分的详细数据,以SQL脚本的形式存储。这样的数据对于构建地理位置相关的应用、统计分析或者数据分析系统非常有用。 首先,我们...
它不仅涵盖了SQL Server 2005的基础知识,还提供了丰富的典型实例,帮助读者在实践中掌握这一强大的数据管理工具。 SQL Server 2005是微软公司推出的一款企业级数据库管理系统,它在性能、安全性、可扩展性和可管理...
在这个典型的网站建设案例中,我们有8个不同的源码示例,这将帮助我们深入理解如何在实际项目中应用ASP和SQL Server。 1. **ASP基础概念** ASP是Web开发中的一个核心技术,它允许开发者在服务器端编写脚本,生成...
在DELL MD3000环境下配置SQL SERVER集群是一项复杂而关键的任务,它涉及到硬件、存储设备、服务器操作系统和数据库软件的集成。本文档将详细介绍整个过程,分为四个主要部分:DELL MD3000磁阵的安装、DELL MD3000磁...