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

Откуда:
Сообщений: 47
Добрый день!

У меня есть хранимая процедура, которая выдает новое значение счетчика.
CREATE PROCEDURE spGetCounter
  @CounterName VarChar(255), --имя счетчика
  @CurrentNumber INT OUTPUT --здесь будет сгенерировано новое значение
AS

  SELECT @CurrentNumber = CurrentNumber FROM Counter WITH (updlock, rowlock) 
  WHERE 
    CounterName = @CounterName

  UPDATE Counter 
  SET
    CurrentNumber = CurrentNumber + 1 
  WHERE 
    CounterName = @CounterName


Проблема в том, что если у меня несколько потоков одновременно пытаются вызвать эту хранимую процедуру, то иногда (хоть и редко) генерируются одинаковые значения, что недопустимо.
Мне нужна строгая уникальность счетчика. Помогите, как лучше сделать. И как правильнее... :)
16 дек 09, 12:53    [8074689]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать получение нового счетчика многопоточным  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
https://www.sql.ru/forum/actualthread.aspx?tid=720581
16 дек 09, 12:55    [8074716]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать получение нового счетчика многопоточным  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А так?

CREATE PROCEDURE spGetCounter
  @CounterName VarChar(255), --имя счетчика
  @CurrentNumber INT OUTPUT --здесь будет сгенерировано новое значение
AS

set nocount on;

  UPDATE Counter WITH (updlock, rowlock) 
  SET
    @CurrentNumber = CurrentNumber = CurrentNumber + 1 
  WHERE 
    CounterName = @CounterName
16 дек 09, 12:57    [8074749]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать получение нового счетчика многопоточным  [new]
Филипп Вульфович
Member

Откуда:
Сообщений: 47
[quot tpg]А так?

quot]

Спасибо! Работает!
21 дек 09, 14:45    [8095867]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить