एक और तरीका जिसे हमने अतीत में उपयोग किया है, वह प्राथमिक कुंजी के साथ एक अस्थायी तालिका बनाना है जिसे हम स्थानांतरित करना चाहते हैं और लूप के दौरान उपयोग करना चाहते हैं इस तरह आप इसे एक प्रकार के ब्लॉक फैशन में कर सकते हैं ताकि आप रद्द कर दिए गए बड़े लेनदेन ओवरहेड से बचें और इसे वापस रोल करना होगा।
मूल रूप से आप जो करना चाहते हैं वह टैबलेटनाम में एक डालने है (...) तालिका नाम से चुनें (...) जहां प्राथमिक कुंजी (प्रक्षेपित करने योग्य शीर्ष 10000 कुंजी का चयन करें)
शीर्ष 10000 जो आप माध्यमिक परिणाम सेट में चाहते हैं, ताकि आप उन्हें temp तालिका से निकाल सकें ताकि उन्हें फिर से संसाधित न किया जा सके।
फिर भी एक और तरीका कर्सर का उपयोग एक समय में आपके द्वारा संसाधित रिकॉर्ड्स की संख्या को कम करने के लिए करना होगा।
एक और लूप विधि थोड़ी देर में ऐसा कुछ करने के लिए होगी।
पूर्णांक (TableName से चयन गणना (PrimaryKey) जहां PrimaryKey नहीं destinstiontable में) सेट @stop =
जबकि (@stop> 0) लेनदेन
डालने destinationTable में शुरू (के रूप में @stop घोषित ...) चयन (...) sourcetable जहां PrimaryKey में नहीं (destinationtable से PrimaryKey चुनें) से
प्रतिबद्ध
सेट @stop = (चुनिंदा गणना (PrimaryKey) TableName से जहां PrimaryKey नहीं destinstiontable में) अंत
सबसे कुशल नहीं है, लेकिन यह काम करेगा और आप लेन-देन नीचे लॉग ऑन रखने के लिए अनुमति चाहिए। जब तक आपको इसकी आवश्यकता न हो, तब तक कोई लॉक कीवर्ड का उपयोग करना सुनिश्चित न करें ताकि आप इस बड़े कदम को पूरा करते समय अन्य लेन-देन को अवरुद्ध न करें (जब तक आप बीसीपी या डीटीएस का उपयोग न करें क्योंकि वे बहुत तेज हैं)।
कुछ कहा गया है कि शायद आपकी सबसे अच्छी शर्त है। बीसीपी, डीटीएस, या कुछ अन्य थोक उपकरण का प्रयोग करें। यदि आप इंडेक्स को छोड़ सकते हैं, तो यह चीजें बहुत तेज हो जाएगी।
स्रोत
2009-02-12 16:26:29
इसमें चयन न करें ... यह क्वेरी समाप्त होने तक सिस्टम टेबल लॉक कर देगा क्योंकि तालिका उसी लेनदेन में बनाई जा रही है। यह वैसे भी कोई प्रदर्शन लाभ नेट होगा। –
@ ब्रायन - पर्याप्त मेला; -पी –