मुझे एक संग्रहीत प्रक्रिया बनाने की आवश्यकता है जो TSQL अनुक्रम का अनुकरण करती है। यह हमेशा हर कॉल पर एक अलग विशिष्ट पूर्णांक मान देता है। इसके अलावा, यदि इसमें एक पूर्णांक पारित किया जाता है, तो उस मूल्य को वापस करना चाहिए यदि कोई परिणाम अधिक नहीं हुआ है या अगला उच्चतम पूर्णांक उपलब्ध है। यह बिना कहे चला जाता है कि एक ही समय में कई ग्राहक इस एसपी को बुला सकते हैं।
कॉलम MetaKey varchar (अधिकतम) और MeatValueLong bigInt के साथ एक तालिका MetaInfo को देखते हुए। यह उम्मीद है कि 'आंतरिक-आईडी-अंतिम' के मेटा के साथ पंक्ति में अंतिम उच्चतम मूल्य निर्दिष्ट होगा। मैंने निम्नलिखित संग्रहित प्रक्रिया बनाई:
CREATE PROCEDURE [dbo].[uspGetNextID]
(
@inID bigInt
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
UPDATE MetaInfo WITH (ROWLOCK)
SET MetaValueLong = CASE
WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1
ELSE @inID+1
END
WHERE MetaKey = 'Internal-ID-Last'
SELECT MetaValueLong
FROM MetaInfo
WHERE MetaKey = 'Internal-ID-Last'
COMMIT TRANSACTION
END
मेरा सवाल बस यह है कि क्या यह संग्रहित प्रक्रिया उम्मीद के मुताबिक काम करती है (सभी कॉलर्स को एक अनूठा परिणाम सौंपा जाएगा)?