SERIALISIERBAR ist eine Isolationsstufe zum Sperren, kein Semaphor .
In diesem Fall funktioniert es nicht. Alles, was Sie tun müssen, ist, eine Lesesperre bis zum Ende des TXN aufrechtzuerhalten, die einen weiteren Prozess beim Lesen des Codes nicht verhindert.
Sie müssen sp_getapplock verwenden im Transaktionsmodus. Sie können es so konfigurieren, dass es wartet, sofort bombardiert usw.:bis zu Ihnen
Dies basiert auf meiner Vorlage von Verschachtelte gespeicherte Prozeduren mit TRY CATCH ROLLBACK-Muster?
ALTER PROCEDURE get_code
AS
SET XACT_ABORT, NOCOUNT ON
DECLARE @starttrancount int, @result int;
BEGIN TRY
SELECT @starttrancount = @@TRANCOUNT
IF @starttrancount = 0 BEGIN TRANSACTION
EXEC @result = sp_getapplock 'get_code', 'Exclusive', 'Transaction', 0
IF @result < 0
RAISERROR('INFO: One at a time please`!', 16, 1);
[...Perform work...]
IF @starttrancount = 0
COMMIT TRANSACTION
ELSE
EXEC sp_releaseapplock 'get_code';
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 AND @starttrancount = 0
ROLLBACK TRANSACTION
RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
GO