Здравствуйте, Козьма Прутков, Вы писали:
КП> Сиквенс и identity штуки нетранзакционные.
Чуть поправлю: они штуки "вне текущей транзакции". В Оракле есть понятие автономной транзакции, и для сиквенса используется именно оно (и с помощью этого понятия в принципе можно написать "свой аналог сиквенса", хотя менее эффективный из-за затруднительности кэширования).
В MSSQL аналог идентити наверное разумнее писать внешней процедурой, хотя полагаю, можно сделать и на T-SQL, используя грязное чтение. Логика примерно следующая:
— делаем таблицу "значений"
— через sp_lock разруливаем одновременный доступ
— если она пуста, вставляем в нее N очередных значений
— забираем очередную значение, читая грязным чтением, и удаляем запись.
Бонусом получаем любимое бухгалтерами отсутствие дырок в нумерации