SQL सर्वर 2005 में बिना ऑर्डर के ऑटो-इंक्रीमेंट आईडी जेनरेट करना
ऑटो-इंक्रीमेंट करते समय एक टेबल से दूसरे टेबल में डेटा डालने की आवश्यकता गैर-पहचान वाला कॉलम एक चुनौती हो सकता है। मानक दृष्टिकोण में कर्सर का उपयोग करना या तालिका चर बनाना शामिल है, लेकिन ये अक्षम हो सकते हैं।
किसी वैध ORDER BY फ़ील्ड के अभाव में, ROW_NUMBER फ़ंक्शन को नियोजित किया जा सकता है। हालाँकि, स्पष्ट ऑर्डर की अनुपस्थिति मूल डेटा ऑर्डर के संरक्षण की गारंटी नहीं देती है। ऐसा इसलिए है क्योंकि "ऑर्डर नहीं किया गया" "मूल ऑर्डर को बनाए रखने" से अलग है। ) चुनना Row_Number() खत्म (क्रमानुसार (1 चुनें)) एकजुट होना( (dbo.TargetTable से (TABLOCKX, HOLDLOCK) के साथ अधिकतम (आईडी) चुनें), 0 ), फ़ील्डवैल्यू Dbo.SourceTable से जहां {somecondition};
यह दृष्टिकोण अधिकतम आईडी की गणना करता है और समवर्ती त्रुटियों से बचने के लिए लॉक प्राप्त करते समय डेटा सम्मिलित करता है।
INSERT dbo.TargetTable (ID, FIELD) SELECT Row_Number() OVER (ORDER BY (SELECT 1)) Coalesce( (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)), 0 ), FieldValue FROM dbo.SourceTable WHERE {somecondition};
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3