У меня есть таблица A (SQL Server 2008), которая содержит наборы минимальных и максимальных чисел.В одной из моих хранимых процедур я использую эту таблицу, объединенную с таблицей продуктов B, чтобы найти доступный номер продукта, который находится между min и max, а затем вставляю новый продукт с этим номером продукта.Поэтому я хочу следующий свободный номер, который находится между мин / макс.
Между поиском следующего доступного номера и вставкой строки продукта, я хочу блокировку, чтобы никто не мог найти тот же номер (и дать дубликат).
Как мне думать в этой ситуации?Должен ли я получить блокировку обновления таблицы A, хотя я никогда не изменяю ее?Блокировка должна быть снята после того, как я выполню вставку в таблицу B и транзакция завершится?Будет ли эта блокировка обновления мешать другим транзакциям читать таблицу A?
Редактировать: таблица min / max является таблицей для различных серий продуктов.В зависимости от того, какую серию вы хотите, я хочу попробовать найти номер в этой последовательности.Productnr не является уникальным, однако можно сделать его уникальным в сочетании со вторым столбцом.Упрощенный sp:
CREATE PROCEDURE [dbo].[InsertProduct]
(
@Param1 int,
@Param2 bit,
...
@Param20 int) AS
BEGIN
DECLARE @ProductNr int
--Here I do a query to determine which ProductNr I should have. Checking that the number is between max/min in the series and that no other product has this productnr.
--Now insert the row
INSERT INTO Products VALUES (@Param1, @ProductNr, ...., @Param2
END