Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Генератор номеров / 3 сообщений из 3, страница 1 из 1
08.05.2002, 07:39
    #32029718
Генератор номеров
Проблема следующая:
имеется таблица
CREATE TABLE jurn (
counterID int IDENTITY (1, 1) NOT NULL ,
classID int NOT NULL ,
number int NOT NULL
... )
Необходимо добавить новую запись с заданным полем classID при этом поле number должно принять значение 1 если поля с таким classID не было и max(number)+1 если было. Другими словами поле number должно быть упорядоченно внутри поля classID и начинаться с 1 для каждого значения classID.
Я написал процедуру
CREATE PROCEDURE addRecord @classID int
AS
declare @count int
declare @number int

begin tran my
select @number = max(number), @count = count(*) from jurn with(tablockx) where classID=@classID
if @count = 0
select @number = 1
else
select @number = @number + 1
insert into jurn(classID,number) values(@classID,@number)
if @@ERROR <> 0
begin
rollback tran my
return 0
end
else
commit tran

Если убрать транзакцию и блокировку массовое добавление с разных станций приведет к дублируемым результатам. С другой стороны блокировать целую таблицу для вставки одной записи не есть гут. Может кто знает другой способ ?
...
Рейтинг: 0 / 0
08.05.2002, 07:57
    #32029722
bik_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генератор номеров
\nALTER PROCEDURE addRecord
@classID int
AS
INSERT INTO jurn (classID, number)
SELECT @classID, ISNULL(MAX(number)+1,1)
FROM jurn
WHERE classID=@classID


+ обработка ошибок
...
Рейтинг: 0 / 0
08.05.2002, 09:34
    #32029745
Генератор номеров
Заработало так

ALTER PROCEDURE addRecord
@classID int
AS
INSERT INTO jurn (classID, number)
SELECT @classID, ISNULL(MAX(number)+1,1)
FROM jurn WITH(TABLOCK)
WHERE classID=@classID

Спасибо за идею.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Генератор номеров / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]