我需要创建一个函数或存储过程,它将生成一个数字序列 - 1,2,3 ....它应该能够记住它在上次调用时生成的数字。例如,我只是做它然后调用它10次。上一代= 10.我停止DB并关闭计算机。下次运行此函数时,它应生成11。
有人可以建议我怎么做吗?
感谢。
答案 0 :(得分:4)
1-创建一个表格,记录所有创建的连续号码,因为商店程序无法为您执行此操作。
2-为该表创建一个存储过程,为您生成类似的数字......
表格强>
CREATE TABLE Number (Nums INT)
GO
存储过程
CREATE PROCEDURE NumberGenerator
@NumberOfNumber INT
AS
BEGIN
DECLARE @MaxNum INT
DECLARE @Inc INT
SELECT @MaxNum = MAX(Nums) FROM Number
IF (@MaxNum IS NULL)
BEGIN
SET @MaxNum = 0
END
SET @Inc = 1
WHILE (@NumberOfNumber > 0)
BEGIN
INSERT INTO Number (Nums)
VALUES (@MaxNum + @Inc)
SET @Inc = @Inc +1
SET @NumberOfNumber = @NumberOfNumber -1
END
SELECT Nums FROM Number
WHERE Nums > @MaxNum
END
检索生成的值
CREATE TABLE #table (Number INT)
INSERT INTO #table (Number)
EXECUTE NumberGenerator @NumberOfNumber = ??? --<-- Number of values you want to generate
SELECT * FROM #table
答案 1 :(得分:2)
这听起来像是SQL标识列的理想用法,默认情况下,每次添加行时,它会自动递增1。如果您正在考虑使用函数为行生成Id编号,则应查看标识列。
如果你真的需要一个数字生成器,你可以在一个序列表中存储一行,并在一个事务中读取它,递增并保存它。