SERIALIZABLE लॉक करने के लिए एक अलगाव स्तर है, न कि semaphore ।
यह इस मामले में काम नहीं करेगा, आपको बस इतना करना होगा कि TXN के अंत तक एक रीड लॉक बना रहे जो किसी अन्य प्रक्रिया को कोड रीडिंग में नहीं रोकता है।
आपको sp_getapplock का उपयोग करना होगा लेन-देन मोड में। आप इसे प्रतीक्षा करने के लिए कॉन्फ़िगर कर सकते हैं, तुरंत बम आदि:आप पर निर्भर करता है
यह मेरे टेम्पलेट पर आधारित है TRY CATCH ROLLBACK पैटर्न वाली नेस्टेड संग्रहीत कार्यविधियाँ?
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