一种创建数字序列生成器的方法?

时间:2013-11-25 22:26:09

标签: sql sql-server sql-server-2005

我需要创建一个函数或存储过程,它将生成一个数字序列 - 1,2,3 ....它应该能够记住它在上次调用时生成的数字。例如,我只是做它然后调用它10次。上一代= 10.我停止DB并关闭计算机。下次运行此函数时,它应生成11。

有人可以建议我怎么做吗?

感谢。

2 个答案:

答案 0 :(得分:4)

像Steve Fenton所解释的那样,Identity Column是满足这种要求的方法,但如果你确实需要创建序列号,你将需要做两件事

  

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编号,则应查看标识列。

如果你真的需要一个数字生成器,你可以在一个序列表中存储一行,并在一个事务中读取它,递增并保存它。