ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

递归、创建临时表

2022-06-28 14:34:41  阅读:130  来源: 互联网

标签:Code varchar 递归 临时 创建 TrackCode ExpiryDate -- Base



GO
/****** Object: StoredProcedure [dbo].[Proc_Drug_ScanTrackCodeTempInStock] Script Date: 2022/6/28 12:30:17 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: zhengwei
-- Create date: 20220610
-- Description: 扫码追溯码入库
-- =============================================
ALTER PROCEDURE [dbo].[Proc_Drug_ScanTrackCodeTempInStock]
@trackCode nvarchar(30),
@deptCode varchar(36),
@SupplierCode varchar(36),
@userName varchar(20),
@voucherCode varchar(55)
AS
BEGIN
SET NOCOUNT ON;

BEGIN TRY
BEGIN TRANSACTION;
DECLARE @trackCodeCount decimal(10,2),@goodsCode varchar(36),@goodsBath varchar(50),@ExpiryDate varchar(10),@InStockId varchar(55),@Msg varchar(500)
-- IF not exists(select * from T_Base_TrackCode where Code=@trackCode)
--BEGIN
--set @Msg = '追溯码['+@trackCode+']不存在,请检查!'
-- RAISERROR (@Msg, 16, 1) WITH NOWAIT
--RETURN 0;
--END
IF exists(select * from T_Base_TrackCode where Code=@trackCode and IsInStockScan=1)
BEGIN
set @Msg = '追溯码['+@trackCode+']已进行入库扫码,不能重复扫码!'
RAISERROR (@Msg, 16, 1) WITH NOWAIT
RETURN 0;
END

--获取所有子码,包括自己

CREATE TABLE #TrackCodeNew
(
Code VARCHAR(50) COLLATE database_default null,
ParentCode VARCHAR(50) COLLATE database_default null,
CodeLevel INT
);
WITH CodeInfo AS(
SELECT Code,ParentCode,CodeLevel FROM dbo.T_Base_TrackCode WHERE Code=@trackCode
UNION ALL
SELECT a.Code,a.ParentCode,a.CodeLevel FROM dbo.T_Base_TrackCode AS a,CodeInfo AS b WHERE a.ParentCode = b.Code
)
insert into #TrackCodeNew select Code,ParentCode,CodeLevel from CodeInfo

--#码为一级码数量就是要入库的数量
SELECT @trackCodeCount = count(*) FROM #TrackCodeNew WHERE CodeLevel=1

SELECT @goodsCode=GoodsCode,@goodsBath=GoodsBatch,@ExpiryDate=ExpiryDate from T_Base_TrackCode a inner join T_Base_TrackCodeProduct b on a.productId = b.Id where code = @trackCode;
IF exists(select * from Oper_InStockVoucherTemp where GoodsID=@goodsCode and GoodsBatch=@goodsBath and YXQ=@ExpiryDate)
BEGIN
PRINT '存在:'+@goodsCode+'----'+@goodsBath+'------'+@ExpiryDate
UPDATE Oper_InStockVoucherTemp set InStockCount = InStockCount+@trackCodeCount,ModifyOn=GETDATE() WHERE GoodsID=@goodsCode and GoodsBatch=@goodsBath and YXQ=@ExpiryDate
SELECT @InStockId =ID from Oper_InStockVoucherTemp WHERE GoodsID=@goodsCode and GoodsBatch=@goodsBath and YXQ=@ExpiryDate
END
ELSE
BEGIN
PRINT '不存在:'+@goodsCode+'----'+@goodsBath+'------'+@ExpiryDate

SET @InStockId = dbo.GetTicks() + '-' +LOWER(NEWID())
INSERT INTO dbo.Oper_InStockVoucherTemp (ID,VoucherCode, Warehouse,GoodsID ,GoodsBatch,YXQ ,InStockCount,Price,Supplier,SuppVoucherCode, Status,IsDeleted,CreatedOn, ModifyOn,CreatedBy,ModifyBy, VoucherLine,VoucherType,Unit,StorageType)
SELECT @InStockId,@voucherCode,@deptCode,b.GoodsCode,b.GoodsBatch,b.ExpiryDate,@trackCodeCount,isnull(b.Price,0),@SupplierCode,b.VoucherCode, 0,0,getdate(),GETDATE(),@userName,@userName, '1','3',b.Unit,'1'
FROM T_Base_TrackCode a
inner join T_Base_TrackCodeProduct b on a.productId = b.Id
inner join BaseGoodsInfo c on b.GoodsCode=c.GoodsCode
WHERE code = @trackCode;
END

--更新追溯码扫描信息、插入临时单据表

UPDATE T_Base_TrackCode SET IsInStockScan=1,inStockScanTime=getdate() WHERE code in (select Code from #TrackCodeNew);

INSERT INTO T_Base_VoucherTrackCodeTemp(VoucherId,TrackCode,isDelete,VoucherType) select @InStockId, Code,'0','3' from #TrackCodeNew

DROP TABLE #TrackCodeNew

COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION;
END;
DECLARE @ErrMsg NVARCHAR(4000) ,
@ErrSeverity INT;
SELECT @ErrMsg = ERROR_MESSAGE() ,
@ErrSeverity = ERROR_SEVERITY();
RAISERROR(@ErrMsg, @ErrSeverity, 1);
RETURN 0;
END CATCH;
RETURN 1;
END

 

标签:Code,varchar,递归,临时,创建,TrackCode,ExpiryDate,--,Base
来源: https://www.cnblogs.com/zhengwei-cq/p/16419325.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有