NEWID() для INT (BigInt, SmallInt) в T-SQL

По ходу работы столкнулся со следующей проблемой — необходимо было сгенерировать уникальный в пределах БД показатель типа INT. Вообще, для uniqueidentifier существет такая замечательная функция NEWID(), которая генерирует заветное значение, а вот для INT'а подобную функцию придется реализовывать самостоятельно.

Вообще, сделать подобно можно, сохранив уже сгенерированные IDшники в какую-нибудь таблицу. Но как реализовать генерацию нового значения?

Первой мыслью было использование транзакций, нахождение максимального числа с последующим его увеличением. Конечно, такой вариант тоже «прокатывает», но параноик-кун, затаившийся внутри меня, кричал о возможных таймаутах, ошибках в транзакции и прочих невкусностях.


Читать дальше →