2009-07-24 5 views
6

पर एक SQL सर्वर कर्सर होता है Iterate करते हैं। जब कोई विशिष्ट स्थिति होती है तो मैं लूप के एक पुनरावृत्ति को छोड़ना चाहता हूं। ब्रेक आपको कर्सर लूप से बाहर ले जाता है और जारी रहता है ऐसा कुछ भी नहीं लगता है।एसक्यूएल सर्वर आप कैसे कर्सर लूप को एक बार जब एक विशिष्ट स्थिति

क्या कोई आदेश है जो कहता है "अरे यह रिकॉर्ड अच्छा नहीं है इसलिए आगे बढ़ें और इसे छोड़ दें और अगले पर काम करें"।

जिस तरह से मुझे पता है कि कर्सर ड्राइवरों की तरह बुरा हैं जो गुजरने वाले लेन में 43 एमपीएच जाते हैं, लेकिन अक्सर सॉफ़्टवेयर में होता है, मैं इसके साथ अटक जाता हूं।

धन्यवाद

उत्तर

7

क्यों नहीं ' टी आप बस एक कथन का उपयोग करें:

IF condition exists that I want to update THEN 
BEGIN 

.... 

END 

Fetch Next 
+1

धन्यवाद कि सही जवाब है। – codingguy3000

0

यह है कि अगर हम क्या कर्सर कोड की तरह देखा पता था कि यह जवाब देने के लिए आसान हो सकता है। शायद आप एक कथन में डाल सकते हैं जो शर्त के लिए जांच करता है और स्थिति मौजूद नहीं होने पर केवल कुछ करता है।

9

यदि आप नीचे लूप के साथ अपने लूप को कोड करते हैं (लूप से पहले प्रारंभिक fetch के साथ) जारी है तो बस आपको शीर्ष पर कूद जाएगा, और उसी पंक्ति को फिर से संसाधित करेगा। आप नीचे दिए गए fetch भाग पर कूदने के लिए एक गोटो का उपयोग कर सकते हैं या शीर्ष पर लाने के लिए लूप को पुन: स्थापित कर सकते हैं और cointinue काम करेगा।

आप अपने पाश गोटो उपयोग करने के लिए संशोधित कर सकता है ...

... 
... 
if <condition> 
BEGIN 
    GOTO Fetch_Next 
END 
.... 
.... 
Fetch_Next: 
FETCH NEXT FROM ... 

यहाँ केवल एक पाश के शीर्ष पर लाने के लिए कुछ नमूना कोड है, काम करेंगे जारी रखने के लिए:

DECLARE <cursor_name> CURSOR FOR 
    SELECT 
    FROM 
    WHERE 
    FOR READ ONLY 

--populate and allocate resources to the cursor 
OPEN <cursor_name> 

--process each row 
WHILE 1=1 
BEGIN 

    FETCH NEXT FROM <cursor_name> 
     INTO @a, @b, @c 

    --finished fetching all rows? 
    IF @@FETCH_STATUS <> 0 
    BEGIN --YES, all done fetching 
     --exit the loop 
     BREAK 
    END --IF finished fetching 

    --do something here-- 
    --do something here-- 

    IF <your condition> 
    BEGIN 
     CONTINUE -- fetch next row 
    END 

    --do something here-- 
    --do something here-- 

END --WHILE 

--close and free the cursor's resources 
CLOSE <cursor_name> 
DEALLOCATE <cursor_name> 
+0

गोटो स्टेटमेंट ने बहुत मदद की। धन्यवाद। –

0

सस्ता जवाब एक आईएफ ब्लॉक डालना है: लूप/आईएफ पंक्ति शुरू करना अच्छा है BEGIN ... अंत/अंत पाश।

0

मुझे कभी भी एक SQL कर्सर नहीं मिला है जिसे मैं थोड़ा विचार से हटा नहीं सकता था, और प्रदर्शन लाभ आमतौर पर विशाल होते हैं। क्या कोई कारण है कि आप केवल उन पंक्तियों का चयन नहीं कर सकते हैं जिन्हें आप पंक्ति प्रसंस्करण द्वारा पंक्ति करने के बजाय संचालित करना चाहते हैं?

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