2014-10-29 75 views
0

我宣布这个顺序:如何还原SQL Server中的序列

CREATE SEQUENCE [dbo].[Monitor_Seq] 
AS [int] 
START WITH 1 
INCREMENT BY 1 
MINVALUE 1 
MAXVALUE 2147483647 
CACHE 
GO 

,我使用它是这样的:

declare @y int 
declare @i int 
select @y = 1 

while @y < 100 begin 

    SELECT @i = NEXT VALUE FOR Monitor_Seq; 
    PRINT CAST (@I AS VARCHAR) 


    -- use @i here 


    select @y = @y + 1 

end /*while*/ 

的问题是:

在那里说在代码中:

- use @i here

假设我决定不继续使用特定的号码,我怎样才能恢复我的序列? 让当我的下一个值的说= 10 情况使我不能与10

我要的号码,下一次上我得到的

SELECT @i = NEXT VALUE FOR Monitor_Seq; 

我想进行@我再次是10。 这可能吗?

+4

我不能回答你的问题,因为我们不使用序列,但我请你意识到,如果这个PROC可以simulatnaeously的多张用户运行,滚动回到序列可能是一个非常糟糕的主意。如果生成的数字为100,并且与您同时运行的某人获得了101,而另一个人获得了102并且您返回到重新使用100,那么您最好测试以查看101和102上的效果。他们可以分配两次吗? – HLGEM 2014-10-29 15:13:22

+2

为什么你需要一个连续的编号系统保存在行中?查询时间的窗口函数是否能够产生相同的结果? – Will 2014-10-29 15:19:33

+3

如果你正在使用数字生成技术,如身份和序列,你需要接受的是,差距只是生活中的事实。停止关注差距。如果出于某种原因差距是灾难性的,请修复**,或者推出自己的可序列化数字发生器。只要认识到(a)防止差距是昂贵的,(b)你仍然不能防止*删除*导致差距。 – 2014-10-29 15:23:03

回答

1

您可以重新启动顺序:

ALTER SEQUENCE Monitor_Seq RESTART WITH 10; 
相关问题