2014-10-29 6 views
0

Я объявленный эту последовательность:как откатить последовательность в SQL сервере

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*/ 

вопрос:

, где он говорит, в коде:

- использование @i здесь

Предположим, я решил не продолжать с определенным номером, как я могу вернуть его обратно в свою последовательность? Скажем, когда я получаю следующее значение = 10 ситуации заставила меня НЕ вести с номером 10.

Я хочу, что на следующий раз, когда я получаю

SELECT @i = NEXT VALUE FOR Monitor_Seq; 

Я хочу получить @ i = 10 снова. это возможно?

+4

Я не могу ответить на ваш вопрос, потому что мы не используем последовательности, но я призываю вас, чтобы понять, что если эта процедура может быть запущена simulatnaeously для Mulitple пользователей, прокат назад последовательность может быть очень плохой идеей. Если вы создаете число 100, а кто-то одновременно работает с вами, получает 101, а другой получает 102, и вы возвращаетесь для повторного использования 100, вам лучше проверить эффект на 101 и 102. Могли бы они получить два раза? – HLGEM

+2

Зачем вам нужна непрерывная система нумерации, сохраненная в строке? Может ли оконная функция во время запроса получить один и тот же результат? – Will

+3

Если вы используете методы генерации чисел, такие как идентификация и последовательность, вам нужно признать, что пробелы - это просто факт жизни. Прекратите заботиться о пробелах. Если по какой-то причине пробелы катастрофичны, либо исправить **, что **, либо свернуть собственный генератор сериализуемых чисел. Просто поймите, что (a) предотвращение пробелов является дорогостоящим и (b) вы все еще не можете предотвратить * удаляет *, которые вызывают разрывы. –

ответ

1

Вы можете перезапустить последовательность:

ALTER SEQUENCE Monitor_Seq RESTART WITH 10; 
Смежные вопросы