Здравствуйте, Andro1900, Вы писали:
A>Табличка в ней PK int identity(1,1)
A>Теперь мне нужно эти значения без таблички генерить
A>Беспокоит мысль: если два клиента одновременно вызовут процедуру/функцию генерации этого значения, то она (процедура/ф-ция) вернёт одинаковые значения
A>Мне бы этого не хотелось
A>ps. что-то наподобие ораклийного сиквенса должно получиться
d_m правльно говорит: не получится сиквенса. Сиквенс и identity штуки нетранзакционные. То есть транзакция при откате не откатывает их состояние назад. Это дает возможность не блокировать их, то есть получил значение — отходи, следующий.
С таблицей все иначе. Если транзакция что-то в ней поменяла, то никто другой не может ни прочитать ни поменять данные, поскольку стоит блокировка (ну, для оракла может и не совсем так, но состояние сиквенса точно не откатывается). Если это не беспокоит, и нужно просто получать последовательные значения, то делается так:
1) создается табличка типа KeyTable(LastId int not null)
2) пишется процедура с текстом типа:
proc GetKey @id int out
as
update KeyTable set @id = LastId + 1, LastId = LastId + 1