2011-12-29 9 views
5

मान लें कि मेरे पास हजारों पंक्तियां अपडेट हैं।मैं अद्यतन अद्यतन पर लूप कैसे बना सकता हूं जो तब तक काम करता है जब तक अद्यतन करने के लिए कोई पंक्ति शेष न हो?

और मैं इसे अद्यतन करने की योजना बना रहा हूं; प्रति पुनरावृत्ति प्रति 1000 पंक्तियों को अपडेट करके।

और जब तक अपडेट करने के लिए कोई पंक्ति नहीं छोड़ी जाती है तब तक मैं फिर से शुरू करना चाहता हूं।

अद्यतन करने के लिए कोई पंक्ति नहीं होने तक मैं नीचे टी-एसक्यूएल स्क्रिप्ट कैसे चला सकता हूं?

-- TODO: Create a loop so that it exists when there is no ROW left to be updated; 
-- how can I do it? 

UPDATE tableToUpdate 
SET IsVegetable = 1 
WHERE Id IN 
       (SELECT TOP 1000 Id 
       FROM tableToUpdate 
       WHERE Date = '2011-07-23 14:00') 

-- Loop ends 
+1

आप हर बार केवल 1000 अधिकतम अपडेट क्यों करना चाहते हैं? मेरे लिए ऐसा लगता है कि WHERE खंड को हटाने से आपकी समस्या हल हो जाएगी। लेकिन आप निश्चित रूप से कहते हैं कि आप इसे 1000 बार करना चाहते हैं बस मुझे आश्चर्य है क्यों? – Ruben

+1

मैंने संख्याओं को एक उदाहरण के रूप में दिया लेकिन लेनदेन समय-बहिष्कार को रोकने का कारण है। और माध्यमिक कारण यह है: कार्यान्वयन पर जिज्ञासा। – pencilCake

उत्तर

7

इस पाश

while 1 = 1 
BEGIN 
    UPDATE top (1000) tableToUpdate 
    SET IsVegetable = 1 
    WHERE 
     Date = '2011-07-23 14:00' 
    AND IsNull(IsVegetable, 0) = 0 

    if @@ROWCOUNT < 1000 BREAK 
END 

प्रयास करें क्यों IsNull - क्योंकि यह स्पष्ट नहीं है - अगर क्षेत्र IsVegetable नल है या नहीं, अगर नहीं - तो IsNull

की जरूरत नहीं जब IsVegetable <> 1 के साथ कोई पंक्ति नहीं छोड़ी जाएगी - लूप छोड़ दिया जाएगा क्योंकि @@ ROWCOUNT = 0 या < 1000 (अंतिम पुनरावृत्ति के लिए)

+0

क्या आप कृपया समझा सकते हैं, आपको इसकी आवश्यकता क्यों थी: और IsNull (IsVegetable, 0) = 0 – pencilCake

+0

और क्या आप उस तंत्र को समझा सकते हैं जो लूप तब तक काम करेगा जब तक 0 पंक्तियां शेष न हों? – pencilCake

+0

उत्तर में जोड़ा गया। –

संबंधित मुद्दे