【发布时间】:2018-11-29 03:16:21
【问题描述】:
我正在编写一个存储过程,它接受两个输入,例如 startingNumber=A00001 和 EndingNumber=A00049,它应该生成如下数字并插入到表中:
A00001
A00002
A00003
A00004
.
.
.
A00049
但是存储过程没有按预期工作,它继续执行并且没有完成。谁能帮我弄清楚哪里出了问题以及如何解决它。这是做这些事情的适当方法吗?如果有人能给我一些其他替代解决方案,我会更高兴。 这是我编写的存储过程:
CREATE PROCEDURE [dbo].[spInsertNumbers]
@StartingNumber nvarchar(25),
@EndingNumber nvarchar(25)
AS
Declare @StartIndex int
Declare @EndIndex int
Declare @Series varchar(5)
Declare @StartNumber int
Declare @EndNumber int
Declare @No nvarchar(25)
Declare @StartCounter int
Declare @EndCounter int
Declare @Number varchar(15)
--Getting the letter
set @Series = substring(@StartingNumber, 1, 1)
--Getting the starting index of the starting and ending Number
set @StartIndex = patindex('%[1-9]%', @StartingNumber)
set @EndIndex = patindex('%[1-9]%', @EndingNumber)
--Getting the starting and ending number
set @StartNumber = substring(@StartingNumber, @StartIndex, 6)
set @EndNumber = substring(@EndingNumber, @EndIndex, 6)
--Converting number string to integer
set @StartCounter = Convert(int, @StartNumber)
set @EndCounter = Convert(int, @EndNumber)
while (@StartCounter <= @EndCounter)
set @Number = CONVERT(varchar, @StartCounter)
if @StartCounter >= 1 and @StartCounter < 10
set @No = @Series + '0000' + @Number
if @StartCounter >= 10 and @StartCounter < 100
set @No= @Series + '000' + @Number
if @StartCounter >= 100 and @StartCounter < 1000
set @No= @Series + '00' + @Number
if @StartCounter >= 1000 and @StartCounter < 10000
set @No= @Series + '0' + @Number
if @StartCounter >= 10000 and @StartCounter < 100000
set @No= @Series + @Number
BEGIN
Insert into TestingNumber(Number)
Values(@No);
set @StartCounter = @StartCounter + 1
END
【问题讨论】:
-
你能提供一个最小的例子来重现你的问题吗?stackoverflow.com/help/mcve也许提供一个sqlfiddle?
标签: sql sql-server tsql while-loop