【SqlServer存储过程(二维数组参数)调用】
作者:互联网
外部调用存储过程方式:
_SCLLID --存储过程名 @ICStockBill='-1,345,2021-12-05,8185,7403,349,administrator',--表头数组参数(用,分割) /*** @ICStockBillEntry='1443,2021120100071,1100,40,751||1443,2021120100068,1100,40,734||1369,2021120100045,980,40,718.8||1369,2021120100037,980,40,717.4||1389,2021112300105,980,40,100.2||1389,2021112300106,980,40,100'--表体二维数组参数(用||和,分割) ***/ @ICStockBillEntry='1443,2021120100071,1100,40,751'--表体一维数组参数(用,分割) -- ============================================= -- Author: zjh -- Create date: 2021-12-05 -- Description: 生产领料 -- ================== 以下是存储过程的内容:======================== CREATE PROCEDURE [dbo].[_SCLLID] @ICStockBill varchar(100), @ICStockBillEntry varchar(1500) AS BEGIN SET NOCOUNT ON; declare @p2 int exec GetICMaxNum 'ICStockBill',@p2 output,1,16394 declare @BillNo varchar(20) declare @ftrantype varchar(20) set @ftrantype = 24--领料单 update ICBillNo set FCurNo=FCurNo+1 where FBillID=@FTranType set @BillNo=(select FFormat from ICBillNo where FBillID= @FTranType) declare @lenBm int set @LenBm=len(@BillNo)
set @BillNo=right(@BillNo+cast((select FCurNo from ICBillNo where FBillID= @FTranType) as varchar(12)),@LenBm)
set @BillNo=(select FPreLetter from ICBillNo where FBillID= @FTranType)+@BillNo
declare @tmpindex int = 1
declare @oldindex int = 1
declare @m1 int
set @tmpindex=CHARINDEX(',',@ICStockBill)
set @m1=cast(SUBSTRING(@ICStockBill,@oldindex,@tmpindex-@oldindex) as int)
set @oldindex=@tmpindex
declare @m2 int
set @tmpindex=CHARINDEX(',',@ICStockBill,@oldindex+1)
set @m2=cast(SUBSTRING(@ICStockBill,@oldindex+1,@tmpindex-@oldindex-1) as int)
set @oldindex=@tmpindex
declare @m3 char(10)
set @tmpindex=CHARINDEX(',',@ICStockBill,@oldindex+1)
set @m3=SUBSTRING(@ICStockBill,@oldindex+1,@tmpindex-@oldindex-1)
set @oldindex=@tmpindex
declare @m4 int
set @tmpindex=CHARINDEX(',',@ICStockBill,@oldindex+1)
set @m4=cast(SUBSTRING(@ICStockBill,@oldindex+1,@tmpindex-@oldindex-1) as int)
set @oldindex=@tmpindex
declare @m5 int
set @tmpindex=CHARINDEX(',',@ICStockBill,@oldindex+1)
set @m5=cast(SUBSTRING(@ICStockBill,@oldindex+1,@tmpindex-@oldindex-1) as int)
set @oldindex=@tmpindex
declare @stockid int
set @tmpindex=CHARINDEX(',',@ICStockBill,@oldindex+1)
set @stockid=cast(SUBSTRING(@ICStockBill,@oldindex+1,@tmpindex-@oldindex-1) as int)
declare @m6 int
set @m6=(select FUserID from t_user where FName=SUBSTRING(@ICStockBill,@tmpindex+1,LEN(@ICStockBill)-@tmpindex))
begin tran
begin try
INSERT INTO ICStockBill(FInterID,FBillNo,FBrNo,FTranType,FCancellation,FStatus,FUpStockWhenSave,FROB,FHookStatus,
Fdate,FDeptID,Fuse,FCheckDate,FSManagerID,FFManagerID,FBillerID,FAcctID,FMultiCheckDate1,FMultiCheckDate2,
FMultiCheckDate3,FMultiCheckDate4,FMultiCheckDate5,FVchInterID,FMultiCheckDate6,FPurposeID,FWBINTERID,
FSelTranType,FBackFlushed,FManageType,FPrintCount)
values(@p2,@BillNo,'0',24,0,0,0,@m1,0,@m3,@m2,'',Null,@m4,@m5,@m6,0,Null,Null,Null,Null,Null,0,Null,12000,0,1,0,0,0)
set @oldindex=-1
set @tmpindex=CHARINDEX('||', @ICStockBillEntry,@oldindex+2)
declare @m21 int
declare @m22 varchar(28)
declare @m23 varchar(28)
declare @m24 varchar(28)
declare @m25 decimal(13,1)
declare @tmpindex2 int = 1
declare @oldindex2 int = 1
if (@tmpindex > 0)
BEGIN
declare @tmpentry varchar(80)
declare @cnt int = 1
WHILE (@tmpindex > 0)
BEGIN
BEGIN
set @tmpentry=SUBSTRING(@ICStockBillEntry, @oldindex+2, @tmpindex-@oldindex-2)
set @tmpindex2=CHARINDEX(',',@tmpentry)
set @m21=cast(SUBSTRING(@tmpentry,@oldindex2,@tmpindex2-@oldindex2) as int)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@tmpentry,@oldindex2+1)
set @m22=SUBSTRING(@tmpentry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@tmpentry,@oldindex2+1)
set @m23=SUBSTRING(@tmpentry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@tmpentry,@oldindex2+1)
set @m24=SUBSTRING(@tmpentry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @m25=cast(SUBSTRING(@tmpentry,@tmpindex2+1,LEN(@tmpentry)-@tmpindex2) as decimal(13,1))
set @tmpindex2=1
set @oldindex2=1
INSERT INTO ICStockBillEntry (FInterID,FEntryID,FBrNo,FItemID,FAuxPropID,FBatchNo,
FQtyMust,FQty,FReProduceType,FCostOBJID,FCostObjGroupID,FUnitID,FAuxQtyMust,Fauxqty,
FSecCoefficient,FSecQty,FAuxPlanPrice,FPlanAmount,Fauxprice,Famount,FBomInterID,Fnote,
FKFDate,FKFPeriod,FPeriodDate,FIsVMI,FEntrySupply,FSCStockID,FEntrySelfB0457,
FEntrySelfB0458,FDCSPID,FOperSN,FOperID,FSNListID,FSourceBillNo,FSourceTranType,
FSourceInterId,FSourceEntryID,FICMOBillNo,FICMOInterID,FPPBomEntryID,FInStockID,
FCostCenterID,FPlanMode,FMTONo,FPositionNo,FItemSize,FItemSuite,FDiscardID)
values(@p2,@cnt,'0',@m21,0,@m22,0,@m25,1059,0,0,275,0,@m25,0,0,0,0,0,0,0,'',Null,0,Null,0,0,
@stockid,@m23,@m24,0,0,'0',0,'',0,0,0,'',0,0,0,0,14036,'','','','',0)
set @cnt = @cnt + 1
END
SET @oldindex = @tmpindex
set @tmpindex=CHARINDEX('||', @ICStockBillEntry,@oldindex+2)
if (@tmpindex < 1)
BEGIN
set @tmpentry=SUBSTRING(@ICStockBillEntry, @oldindex+2, LEN(@ICStockBillEntry)-@oldindex-1)
set @tmpindex2=CHARINDEX(',',@tmpentry)
set @m21=cast(SUBSTRING(@tmpentry,@oldindex2,@tmpindex2-@oldindex2) as int)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@tmpentry,@oldindex2+1)
set @m22=SUBSTRING(@tmpentry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@tmpentry,@oldindex2+1)
set @m23=SUBSTRING(@tmpentry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@tmpentry,@oldindex2+1)
set @m24=SUBSTRING(@tmpentry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @m25=cast(SUBSTRING(@tmpentry,@tmpindex2+1,LEN(@tmpentry)-@tmpindex2) as decimal(13,1))
INSERT INTO ICStockBillEntry (FInterID,FEntryID,FBrNo,FItemID,FAuxPropID,FBatchNo,
FQtyMust,FQty,FReProduceType,FCostOBJID,FCostObjGroupID,FUnitID,FAuxQtyMust,Fauxqty,
FSecCoefficient,FSecQty,FAuxPlanPrice,FPlanAmount,Fauxprice,Famount,FBomInterID,Fnote,
FKFDate,FKFPeriod,FPeriodDate,FIsVMI,FEntrySupply,FSCStockID,FEntrySelfB0457,
FEntrySelfB0458,FDCSPID,FOperSN,FOperID,FSNListID,FSourceBillNo,FSourceTranType,
FSourceInterId,FSourceEntryID,FICMOBillNo,FICMOInterID,FPPBomEntryID,FInStockID,
FCostCenterID,FPlanMode,FMTONo,FPositionNo,FItemSize,FItemSuite,FDiscardID)
values(@p2,@cnt,'0',@m21,0,@m22,0,@m25,1059,0,0,275,0,@m25,0,0,0,0,0,0,0,'',Null,0,Null,0,0,
@stockid,@m23,@m24,0,0,'0',0,'',0,0,0,'',0,0,0,0,14036,'','','','',0)
END
END
END
else
BEGIN
set @tmpindex2=CHARINDEX(',',@ICStockBillEntry)
set @m21=cast(SUBSTRING(@ICStockBillEntry,@oldindex2,@tmpindex2-@oldindex2) as int)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@ICStockBillEntry,@oldindex2+1)
set @m22=SUBSTRING(@ICStockBillEntry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@ICStockBillEntry,@oldindex2+1)
set @m23=SUBSTRING(@ICStockBillEntry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @oldindex2=@tmpindex2
set @tmpindex2=CHARINDEX(',',@ICStockBillEntry,@oldindex2+1)
set @m24=SUBSTRING(@ICStockBillEntry,@oldindex2+1,@tmpindex2-@oldindex2-1)
set @m25=cast(SUBSTRING(@ICStockBillEntry,@tmpindex2+1,LEN(@ICStockBillEntry)-@tmpindex2) as decimal(13,1))
INSERT INTO ICStockBillEntry (FInterID,FEntryID,FBrNo,FItemID,FAuxPropID,FBatchNo,
FQtyMust,FQty,FReProduceType,FCostOBJID,FCostObjGroupID,FUnitID,FAuxQtyMust,Fauxqty,
FSecCoefficient,FSecQty,FAuxPlanPrice,FPlanAmount,Fauxprice,Famount,FBomInterID,Fnote,
FKFDate,FKFPeriod,FPeriodDate,FIsVMI,FEntrySupply,FSCStockID,FEntrySelfB0457,
FEntrySelfB0458,FDCSPID,FOperSN,FOperID,FSNListID,FSourceBillNo,FSourceTranType,
FSourceInterId,FSourceEntryID,FICMOBillNo,FICMOInterID,FPPBomEntryID,FInStockID,
FCostCenterID,FPlanMode,FMTONo,FPositionNo,FItemSize,FItemSuite,FDiscardID)
values(@p2,1,'0',@m21,0,@m22,0,@m25,1059,0,0,275,0,@m25,0,0,0,0,0,0,0,'',Null,0,Null,0,0,
@stockid,@m23,@m24,0,0,'0',0,'',0,0,0,'',0,0,0,0,14036,'','','','',0)
END
end try
begin catch
rollback tran
select 0
return
end catch
commit tran
select 1
END
标签:oldindex2,oldindex,调用,tmpindex2,SqlServer,SUBSTRING,二维,set,tmpindex 来源: https://blog.csdn.net/zjhh116/article/details/121725635