Я сделал это в прошлом году по проекту. В принципе, я просто создал таблицу с именем последовательности, текущее значение, & приращение суммы.
Затем я создал 4 проки:
- GetCurrentSequence (SequenceName)
- GetNextSequence (SequenceName)
- CreateSequence (SequenceName, startValue, incrementAmount)
- DeleteSequence (SequenceName)
Но есть ограничение, которое вы не можете оценить; функции не могут иметь побочных эффектов. Таким образом, вы можете создать функцию для GetCurrentSequence (...), но GetNextSequence (...) должен быть proc, так как вы, вероятно, захотите увеличить текущее значение последовательности. Однако, если это proc, вы не сможете использовать его непосредственно в своих инструкциях вставки.
Таким образом, вместо
insert into mytable(id, ....) values(GetNextSequence('MySequence'), ....);
Вместо этого вам нужно будет разбить его на 2 линии;
declare @newID int;
exec @newID = GetNextSequence 'MySequence';
insert into mytable(id, ....) values(@newID, ....);
Кроме того, SQL Server не имеет какой-либо механизм, который может сделать что-то вроде
MySequence.Current
или
MySequence.Next
Будем надеяться, что кто-то скажет мне, что я неправильно с вышеуказанными ограничениями , но я уверен, что они точны.
Удачи.