Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Снова повторяющиеся значения  [new]
Ефим
Member

Откуда:
Сообщений: 57
Я уже писал о своей проблеме.
Уникальные значения поля nom формируются с помощью хранимой процедуры:
CREATE procedure new_nom (@nom_zak int)
as

set transaction isolation level serializable

begin tran

declare @maxnom int, @mes int, @nomchar varchar(50), @data_kv datetime


select @maxnom=(select max(convert(int,substring(nom,3,50))) from zakazy2 where substring(nom,1,2)=substring(convert(varchar,year(getdate())),3,2))
select @maxnom=isnull(@maxnom,0)

if @maxnom=0
	select @nomchar=(select substring(convert(varchar,year(getdate())),3,2)+'1' as nom)
else
	select @nomchar=(select substring(convert(varchar,year(getdate())),3,2)+convert(varchar,@maxnom+1) as nom)




select @data_kv=getdate()

insert into zakazy2 (nomer, nom, data_kv) values (@nom_zak, @nomchar, @data_kv)

select @nomchar as nom, @data_kv as data_kv


commit tran


set transaction isolation level read committed

Когда поставил
set transaction isolation level serializable
,
значения в поле nom перестали повторятся.
Но вот сейчас обнаружил ту же проблему.
У меня MS SQL Server 7. Разве set transaction isolation level serializable не дает
гарантии, что процедура не будет выполнятся параллельно несколькими пользователями?
23 авг 05, 10:38    [1809083]     Ответить | Цитировать Сообщить модератору
 Re: Снова повторяющиеся значения  [new]
Брюлик
Member

Откуда:
Сообщений: 690
BOL
SERIALIZABLE

Places a range lock on the data set, preventing other users from updating or inserting rows into the data set until the transaction is complete. This is the most restrictive of the four isolation levels. Because concurrency is lower, use this option only when necessary. This option has the same effect as setting HOLDLOCK on all tables in all SELECT statements in a transaction
23 авг 05, 10:40    [1809095]     Ответить | Цитировать Сообщить модератору
 Re: Снова повторяющиеся значения  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Ефим
Разве set transaction isolation level serializable не дает
гарантии, что процедура не будет выполнятся параллельно несколькими пользователями?

Нет. Эта настройка управляет только временем жизни блокировок, накладываемых на ресурсы, используемые в запросах.
23 авг 05, 10:44    [1809118]     Ответить | Цитировать Сообщить модератору
 Re: Снова повторяющиеся значения  [new]
Ефим
Member

Откуда:
Сообщений: 57
Спасибо за ответ.
23 авг 05, 11:05    [1809189]     Ответить | Цитировать Сообщить модератору
 Re: Снова повторяющиеся значения  [new]
Ефим
Member

Откуда:
Сообщений: 57
BOL

Serializability is the property such that the database state achieved by running a set of concurrent transactions is equivalent to the database state that would be achieved if the set of transactions were executed serially in some order.
???
23 авг 05, 11:40    [1809354]     Ответить | Цитировать Сообщить модератору
 Re: Снова повторяющиеся значения  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ефим
BOL

Serializability is the property such that the database state achieved by running a set of concurrent transactions is equivalent to the database state that would be achieved if the set of transactions were executed serially in some order.
???

А причем здесь "параллельное выполнение процедуры несколькими пользователями" ?
Вы должны проверить какие у вас блокировки накладываются, сколько они держаться, какие действия позволяют сделать другим коннектам и тд
23 авг 05, 11:49    [1809408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить