में ऑर्डर नंबर जेनरेट करने का सही तरीका यह प्रश्न निश्चित रूप से बहुत व्यापक दायरे पर लागू होता है, लेकिन यहां यह है।SQL सर्वर
मेरे पास एक बुनियादी ईकॉमर्स ऐप है, जहां उपयोगकर्ता स्वाभाविक रूप से पर्याप्त, ऑर्डर दे सकते हैं। कहा गया है कि आदेशों को एक अद्वितीय संख्या की आवश्यकता है, जिसे मैं अभी उत्पन्न करने की कोशिश कर रहा हूं।
प्रत्येक आदेश विक्रेता-विशिष्ट है। असल में, मेरे पास OrderNumberInfo (VendorID, OrderNumber)
तालिका है। अब जब भी कोई ग्राहक ऑर्डर देता है तो मुझे कण विक्रेता के लिए OrderNumber
बढ़ाने और उस मान को वापस करने की आवश्यकता होती है। स्वाभाविक रूप से, मैं अन्य प्रक्रियाओं मुझे के साथ हस्तक्षेप नहीं करना चाहते, तो मैं विशेष रूप से इस पंक्ति किसी भी तरह लॉक करने की आवश्यकता:
begin tranaction
declare @n int
select @n = OrderNumber
from OrderNumberInfo
where VendorID = @vendorID
update OrderNumberInfo
set OrderNumber = @n + 1
where OrderNumber = @n and VendorID = @vendorID
commit transaction
अब, मैं select ... with (updlock rowlock)
के बारे में, निराशावादी ताला, आदि पढ़ा है, लेकिन सिर्फ फिट नहीं कर सकते यह सब एक सुसंगत तस्वीर में:
- ये संकेत SQL सर्वर 2008 के स्नैपशॉट अलगाव के साथ कैसे खेलते हैं?
- क्या वे पंक्ति-स्तर, पृष्ठ-स्तर या यहां तक कि तालिका-स्तर के ताले भी करते हैं?
- यह एक विक्रेता के लिए संख्याएं उत्पन्न करने की कोशिश कर रहे एकाधिक उपयोगकर्ताओं को कैसे सहन करता है?
- क्या अलगाव स्तर यहां उचित हैं?
- और आम तौर पर - ऐसी चीजों को करने का तरीका क्या है?
संपादित
बस कुछ चीजें स्पष्ट करने के:
एप्लिकेशन के इस विशेष कोने में- प्रदर्शन बिल्कुल नहीं एक मुद्दा है: आदेश अपेक्षाकृत कम रखा जाएगा और एक शामिल होगी विक्रेताओं की वेब सेवा के लिए महंगी कॉल, इसलिए 1-सेकंड देरी काफी सहनशील है
- हम वास्तव में को प्रत्येक विक्रेता के ऑर्डर नंबरों को बी करने की आवश्यकता है ई स्वतंत्र और अनुक्रमिक
यह दिलचस्प है! धन्यवाद! –
यदि ऑर्डर नम्बर कॉलम अंतिम उपयोग ऑर्डर नम्बर का प्रतिनिधित्व करता है, तो क्या आप सम्मिलित नहीं होंगे। ऑर्डर नम्बर? – Thomas
@ थॉमस: मैं सिर्फ प्रश्न में दिए गए कोड के व्यवहार की नकल कर रहा हूं, जो ऑर्डर नंबर पहले प्राप्त करता है और फिर कॉलम को बढ़ाता है। लेकिन अगर आप बढ़ाना चाहते हैं और फिर बढ़ी हुई ऑर्डर नंबर प्राप्त करें तो 'INSERTED.OrderNumber' ऐसा करने का तरीका होगा। – LukeH