Несколько веб-серверов обращаются к SQL-серверу для получения числового кода, когда этот код не существует, он должен автоматически генерироваться SQL-сервером.
Мне нужно убедиться, что даже если два одновременных вызовавходите, и код не существует, создается только один код, и оба вызова возвращают один и тот же код.Поэтому я должен сделать что-то вроде этого:
begin lock
if code exists
return code
else
generate code
return code
end lock
Я немного читал об уровнях изоляции и блокировке таблиц, но у меня ужасный беспорядок со всем этим.Сначала я подумал, что SERIALIZABLE уровень изоляции - это то, что мне нужно, но, видимо, это не так.
Итак, что бы вы сделали, чтобы выполнить «блокировку» в TSQL?
Большое спасибо.
ОБНОВЛЕНИЕ:
Я получил эту ошибку, когда я пытался установить сериализуемый уровень, используя этот как пример:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE get_code
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
select code from codes where granted is null;
END
GO
Сообщение 1018, Уровень 15, Состояние 1, Процедура get_code, Строка 4 Неверный синтаксис рядом с 'SERIALIZABLE'.Если это предназначено как часть табличной подсказки, теперь требуются ключевое слово WITH и скобки.См. SQL Server Books Online для правильного синтаксиса.Msg 102, уровень 15, состояние 1, строка 5 Неверный синтаксис рядом с 'END'.
Что это значит?