存储过程拆分循环保存的问题
存储过程1
存储过程2
其中存储过程PopFirstWord是按#拆分字符串,现在我希望是在InsertToExpertList中执行@ExpIDList=1#2;@EIdList=3#4#5时能在ExampleEstimate表中插入数据:
expid eid
1 3
1 4
1 5
2 3
2 4
2 5
可是却只插入前面3条,也就是说执行了里面的循环后,外面的循环就不执行了。PopFirstWord是来源微软的petshop的,是没问题的。主要是InsertToExpertList该怎么改,高手帮帮忙。
CREATE PROCEDURE PopFirstWord
@SourceString NVARCHAR(4000) = NULL OUTPUT,
@FirstWord NVARCHAR(4000) = NULL OUTPUT
AS
SET NOCOUNT ON
-- Procedure accepts a comma delimited string as the first parameter
-- Procedure outputs the first word in the second parameter
-- Procedure outputs the remainder of the delimeted string in the first parameter
-- Procedure yields the length of the First Word as the return value
DECLARE @Oldword NVARCHAR(4000)
DECLARE @Length INT
DECLARE @CommaLocation INT
SELECT @Oldword = @SourceString
IF NOT @Oldword IS NULL
BEGIN
SELECT @CommaLocation = CHARINDEX('#',@Oldword)
SELECT @Length = DATALENGTH(@Oldword)
IF @CommaLocation = 0
BEGIN
SELECT @FirstWord = @Oldword
SELECT @SourceString = NULL
RETURN @Length
END
SELECT @FirstWord = SUBSTRING(@Oldword, 1, @CommaLocation -1)
SELECT @SourceString = SUBSTRING(@Oldword, @CommaLocation + 1, @Length - @CommaLocation)
RETURN @Length - @CommaLocation
END
RETURN 0
------------------------------------------------
GO
存储过程2
CREATE PROCEDURE InsertToExpertList
@ExpIDList NVARCHAR(4000),
@EIdList NVARCHAR(4000),
@CMaker varchar(50)
AS
SET NOCOUNT ON
Begin TRAN
DECLARE @Length INT
DECLARE @FirstExpID NVARCHAR(4000)
DECLARE @ExpID INT
SELECT @Length = DATALENGTH(@ExpIDList)
WHILE @Length > 0
BEGIN
EXECUTE @Length = PopFirstWord @ExpIDList OUTPUT, @FirstExpID OUTPUT
IF @Length > 0
BEGIN
SELECT @ExpID= CONVERT(int, @FirstExpID)
if @ExpID>0
Begin
DECLARE @ELen INT
DECLARE @FirstEId NVARCHAR(4000)
DECLARE @EId INT
SELECT @ELen = DATALENGTH(@EIdList)
WHILE @ELen > 0
begin
EXECUTE @ELen = PopFirstWord @EIdList OUTPUT, @FirstEId OUTPUT
if @ELen > 0
begin
SELECT @EID= CONVERT(int, @FirstEID)
DECLARE @ncount INT
select @ncount= ( select count(*) from ExampleEstimate where EXPId=@EXPId and EId=@EId)
if @ncount=0
begin
insert into ExampleEstimate(EXPId,EId,CMaker) values ( @EXPId,@EId,@CMaker)
end
end
end
End
if @@ERROR <>0
Begin
ROLLBACK TRAN
RETURN 0
End
END
END
COMMIT TRAN
GO
其中存储过程PopFirstWord是按#拆分字符串,现在我希望是在InsertToExpertList中执行@ExpIDList=1#2;@EIdList=3#4#5时能在ExampleEstimate表中插入数据:
expid eid
1 3
1 4
1 5
2 3
2 4
2 5
可是却只插入前面3条,也就是说执行了里面的循环后,外面的循环就不执行了。PopFirstWord是来源微软的petshop的,是没问题的。主要是InsertToExpertList该怎么改,高手帮帮忙。
...全文
相关推荐
Sql拆分字符串
**循环拆分字符串**:使用`WHILE`循环来逐个拆分字符串。这个循环会一直执行直到字符串中不再含有逗号(即`CHARINDEX(',', @str)`返回0)为止。
PHP三进三出股权拆分盘三盘分盘循环拆分系统源码
【PHP三进三出股权拆分盘三盘分盘循环拆分系统源码】是一种基于PHP编程语言开发的金融投资管理软件,它主要用于股权拆分盘的管理与操作。
多sheet分裂保存_工作簿多个sheet拆分_
在给定的“多sheet分裂保存.xlsm”文件中,很可能已经内置了这样的VBA宏,允许用户一键完成拆分过程。
Python将一个Excel拆分为多个Excel
同时,设置index=False是为了在保存时不包含原DataFrame的索引列。以上就是使用Python进行Excel拆分的核心代码和步骤。
Access中利用拆分后端数据库保存不同数据
Access 中利用拆分后端数据库保存不同数据在 Access 中,保存大量数据是非常重要的,特别是在一些需要长期保存数据的应用场景中。为了解决这个问题,我们可以通过拆分后端数据库来保存不同数据。


疑难问题
