बनाने के लिए मुझे SQL Server 2008 कॉलम में एक पूर्णांक बढ़ाने की आवश्यकता है।SQL सर्वर 2008 में MAX + 1 पूर्णांक के साथ समवर्ती समस्याओं से बचें ... स्वयं पहचान मान
लगता है जैसे मुझे IDENTITY
कॉलम का उपयोग करना चाहिए, लेकिन मुझे अपने प्रत्येक ग्राहक के लिए अलग काउंटर बढ़ाने की आवश्यकता है। ई-कॉमर्स साइट के बारे में सोचें जहां प्रत्येक ग्राहक को अपना बढ़ता क्रम संख्या प्राप्त होता है, जो 1 से शुरू होता है। मूल्य अद्वितीय (प्रति ग्राहक) होना चाहिए।
,
Customer1 (Order #s 1,2,3,4,5...)
Customer2 (Order #s 1,2,3,4,5...)
अनिवार्य रूप से, मैं मैन्युअल रूप से एसक्यूएल के identity
समारोह के काम करने के लिए के बाद से ग्राहकों की संख्या असीमित है और मैं उनमें से प्रत्येक के लिए order #
काउंटरों की जरूरत है की आवश्यकता होगी।
मैं काफी सहज कर रहा हूँ:
BEGIN TRANSACTION
SELECT @NewOrderNumber = MAX(OrderNumber)+1 From Orders where [email protected]
INSERT INTO ORDERS VALUES (@NewOrderNumber, other order columns here)
COMMIT TRANSACTION
मेरे समस्या ताला लगा है और संगामिति चिंताओं और एक अनूठा मूल्य आश्वस्त। ऐसा लगता है कि हमें TABLOCKX
से लॉक करने की आवश्यकता है। लेकिन यह एक उच्च मात्रा डेटाबेस है और जब भी मुझे SELECT MAX+1
प्रक्रिया करने की आवश्यकता होती है और एक नया ऑर्डर रिकॉर्ड डालने की आवश्यकता होती है तो मैं पूरी Orders
तालिका को लॉक नहीं कर सकता।
लेकिन, अगर मैं पूरी तालिका को लॉक नहीं करता हूं, तो मुझे उस ग्राहक के लिए एक अद्वितीय मूल्य नहीं मिल सकता है। चूंकि हमारी कुछ ऑर्डर प्रविष्टि एक बहु-थ्रेडेड विंडोज प्रक्रिया द्वारा बैच में तथ्य के बाद की जाती है, इसलिए यह संभव है कि 2 ऑपरेशंस एक ही ग्राहक के लिए एक नया ऑर्डर डालने के इच्छुक हों।
तो लॉकिंग पद्धति या तकनीक डेडलॉक्स से कैसे बचेंगी और फिर भी मुझे प्रति ग्राहक अद्वितीय वृद्धि क्रम संख्या बनाए रखने दें?
संभव डुप्लिकेट: एक प्राप्त करने के लिए पर्याप्त एक transcation में इस घोंसले है डेटाबेस से अद्वितीय संख्या?] (http://stackoverflow.com/questions/4169591/sql-server-is-this-nesting-in-a-transcation-sfulicient-for-getting-a-unique-num) – GSerg