Re[2]: MSSQL2005/08: генерация идентити
От: Softwarer http://softwarer.ru
Дата: 28.01.09 13:31
Оценка:
Здравствуйте, Козьма Прутков, Вы писали:

КП> Сиквенс и identity штуки нетранзакционные.


Чуть поправлю: они штуки "вне текущей транзакции". В Оракле есть понятие автономной транзакции, и для сиквенса используется именно оно (и с помощью этого понятия в принципе можно написать "свой аналог сиквенса", хотя менее эффективный из-за затруднительности кэширования).

В MSSQL аналог идентити наверное разумнее писать внешней процедурой, хотя полагаю, можно сделать и на T-SQL, используя грязное чтение. Логика примерно следующая:

— делаем таблицу "значений"
— через sp_lock разруливаем одновременный доступ
— если она пуста, вставляем в нее N очередных значений
— забираем очередную значение, читая грязным чтением, и удаляем запись.

Бонусом получаем любимое бухгалтерами отсутствие дырок в нумерации
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.