В SQL Server можно запросить целый диапазон значений последовательности, обновляя последовательность лишь один раз для целого диапазона и распределяя отдельные значения с помощью приложения. Чтобы запросить новый диапазон значений последовательности, применяйте хранимую процедуру sp_sequence_ get_range.

Если указать во входных данных имя последовательности и размер диапазона, то в качестве выходных параметров будут получены первое значение в диапазоне, последнее значение, число циклов повторения последовательности (если разрешено), приращение последовательности и минимальное и максимальное значения. Если циклы не разрешены и если при запросе нового диапазона вы превышаете максимальное значение (минимальное при отрицательном приращении), то выдается ошибка 11732; в этом случае можно применить программный код обработки ошибок.

При первом запуске должно быть получено первое значение 1; при втором запуске должно быть получено первое значение 12. Конечно, в приложении обычно распределяется каждый диапазон из 11 значений. В первом случае значения от 1 до 11, во втором — значения от 12 до 22.

А если имеется таблица Т1 с двумя столбцами key 1 и кеу2, которые должны получать значения из одной последовательности? Если назначить обоим столбцам выражения по умолчанию, которые применяют выражение NEXT VALUE FOR к одной последовательности, то во всех строках обоих столбцов появятся одинаковые значения. Если нужно применить к таблице однострочную инструкцию INSERT, то можно просто вызвать выражение NEXT VALUE FOR дважды в двух отдельных инструкциях, сохранить значения в переменных, а затем использовать эти переменные в инструкции INSERT.

Положение заметно усложняется, если приходится иметь дело с многострочными вставками. Сколько существует путей решения этой задачи?