इसके लिए कोई आसान तरीका नहीं है, खासकर यदि आप अगले उपलब्ध मूल्य (= कोई अंतराल) पर जोर देते हैं। आपको ऑटो वृद्धि मूल्य का उपयोग करना चाहिए और यह आपके एप्लिकेशन को बेहतर प्रदर्शन करेगा।
समस्या क्या है?
- आप डेटाबेस से एक मूल्य प्राप्त करने की आवश्यकता
- आप अपने इकाई
- निर्दिष्ट करने के लिए की जरूरत है आप डेटाबेस
आसान लग रहा है करने के लिए इकाई को बचाने की जरूरत नहीं है, यह? नहीं, यदि आपके समवर्ती वातावरण नहीं हैं तो अधिकतर एक धागा चरण 1 कर सकता है। समसामयिक रूप से अन्य थ्रेड चरण 3 तक पहुंचने से पहले = = सभी थ्रेड एक ही मान के साथ रिकॉर्ड डालेंगे।
इससे कैसे निपटें? एक तरीका है मूल्य को प्राप्त करने और बढ़ाने के लिए अधिकतम मूल्य और परमाणु संचालन के साथ अलग तालिका का उपयोग करना। मैं कुछ कर रही प्रक्रिया संग्रहीत लगता है कि इस तरह परमाणु होना चाहिए:
DECLARE @Result INT
UPDATE SequenceTable SET @Result = MaxValue = MaxValue + 1 WHERE SequnceName = '...'
RETURN @Result
संग्रहीत प्रक्रिया करने के लिए कॉल सबसे अच्छा प्रवाह बनाने के लिए किसी भी लेनदेन के बाहर होना चाहिए।
यह उम्मीद है कि आप अंतराल के बिना अद्वितीय संख्या नहीं बल्कि अनुक्रम उत्पन्न करने के लिए अनुमति चाहिए। यदि आप इस तरह के ऑपरेशन द्वारा मूल्य लेते हैं और आप उस मूल्य का उपयोग नहीं करेंगे, तो यह खो जाएगा और आपके अनुक्रम में अंतर होगा।
आप नहीं चाहते हैं अंतराल आप लेन-देन में संग्रहीत प्रक्रिया कॉल और ऑपरेशन में डाल दिया जाना चाहिए ताकि अनुक्रम तालिका में है कि रिकॉर्ड जब तक डेटा के लिए प्रतिबद्ध हैं बंद है।
स्रोत
2011-08-03 22:02:01
धन्यवाद कि काम किया। – Jonnster