डालें मैं SQL सर्वर में एक तालिका से निपट रहा हूं जिसमें serial_no
कॉलम है, जिसे एक गैर शून्य int के रूप में परिभाषित किया गया है। यह एक ऑटो incrementing फ़ील्ड प्रतीत नहीं होता है, जैसे कि मैं उस कॉलम को अपने सम्मिलन कथन से बाहर छोड़ देता हूं, मुझे यह कहते हुए एक त्रुटि मिलती है कि serial_no
फ़ील्ड शून्य नहीं हो सकता है।एसक्यूएल सर्वर: अगले उपलब्ध int
तो मैं अगले उपलब्ध नंबर को कैसे सम्मिलित करूं?
मैं इस कोशिश की:
INSERT INTO mytable (serial_no) VALUES ((SELECT MAX(serial_no)+1 FROM mytable))
लेकिन मैं कह रही है कि सबक्वेरी इस संदर्भ में नहीं किया जा सकता कोई त्रुटि मिलती है।
संपादित करें: यह तालिका शेल्फ उत्पाद के बंद में उपयोग की जाती है, इसलिए मैं डिज़ाइन को बदल नहीं सकता और serial_no कॉलम को ऑटो वृद्धि नहीं कर सकता।
क्या यह सभी पंक्तियों में अद्वितीय होना चाहिए ?? उत्तरों में अनुशंसित दृष्टिकोण आमतौर पर समवर्ती-सुरक्षित नहीं होते हैं, उदा। आप डुप्लिकेट के साथ समाप्त हो सकते हैं ..... आपको या तो एक की आवश्यकता है) इसे 'पहचान पहचान' कॉलम बनाएं और SQL सर्वर को इसके बारे में चिंता करने दें, बी) obviuos 'SELECT MAX (serial_no) + से बहुत अधिक काम करें 1', या सी) SQL सर्वर 2011 के लिए प्रतीक्षा करें और 'SEQUENCES' –
marc_s की इसकी अवधारणा का उपयोग करें, मैं पूरी तरह से सहमत हूं, लेकिन दुर्भाग्य से मैं डीबी डिज़ाइन को नहीं बदल सकता। अगर मैं टेबल को लॉक करता हूं, तो सम्मिलित करें और फिर अनलॉक करें? क्या यह एक डुप्ली बनाने से बचाएगा? या एक प्रश्न जो प्रतीक्षा में है बस लॉक को रिलीज़ करने की प्रतीक्षा करें और फिर डुप्लिकेट # वैसे भी डालें? –
क्या आप यह निर्धारित करने के लिए एक ट्रेस चला सकते हैं कि तृतीय पक्ष एप्लिकेशन मूल्य कैसे बनाता है और बस वही करता है? मैं कहूंगा कि यदि कोई पहचान कॉलम नहीं है तो वे अगले मूल्य को रखने के लिए तालिका का उपयोग कर रहे हैं। एक ऐसा उत्तर है जो पहले से ही इस तकनीक का उल्लेख करता है। इस MAX() + 1 दृष्टिकोण के साथ डुप्लिकेट की संभावना का उल्लेख करने के लिए –