У меня есть куча служебных процедур, которые просто проверяют некоторые условия в базе данных и возвращают результат флага. Эти процедуры выполняются с уровнем изоляции READ UNCOMMITTED, эквивалентным WITH NOLOCK.
У меня также есть более сложные процедуры, которые выполняются с SERIALIZABLE уровнем изоляции. У них тоже есть такие же чеки.
Поэтому я решил вызвать эти процедуры проверки изнутри этих сложных процедур, а не копировать код проверки.
В основном это выглядит так:
CREATE PROCEDURE [dbo].[CheckSomething]
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
-- Do checks
COMMIT TRANSACTION
и
CREATE PROCEDURE [dbo].[DoSomethingImportant]
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
EXECUTE [dbo].[CheckSomething]
-- Do some work
COMMIT TRANSACTION
Это было бы хорошо, чтобы сделать это? Будет ли временно активированный нижний уровень изоляции как-то нарушать защиту более высокого уровня или все идеально безопасно?
РЕДАКТИРОВАТЬ: выполнение идет без ошибок.