SQL सर्वर में, आप GOTO
. का उपयोग कर सकते हैं निष्पादन के प्रवाह को बदलने के लिए। आप इसका उपयोग टी-एसक्यूएल कोड के दूसरे हिस्से में "कूदने" के लिए कर सकते हैं।
जिस तरह से यह काम करता है, आप एक लेबल बनाते हैं, फिर आप GOTO
. का उपयोग कर सकते हैं उस लेबल पर कूदने के लिए। GOTO
. के बीच कोई भी कोड और लेबल को छोड़ दिया जाता है, और लेबल पर प्रसंस्करण जारी रहता है।
GOTO
किसी प्रक्रिया, बैच या स्टेटमेंट ब्लॉक के भीतर कहीं भी स्टेटमेंट और लेबल का उपयोग किया जा सकता है। उन्हें नेस्ट भी किया जा सकता है।
उदाहरण 1 - मूल उपयोग
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है।
PRINT 1 PRINT 2 PRINT 3 GOTO Bookmark PRINT 4 PRINT 5 Bookmark: PRINT 6
परिणाम:
1 2 3 6
उदाहरण 2 - लेबल अद्वितीय होने चाहिए
क्वेरी बैच या संग्रहीत कार्यविधि में प्रत्येक लेबल अद्वितीय होना चाहिए।
यहां बताया गया है कि यदि आप एक ही लेबल को एक से अधिक बार प्रदान करते हैं तो क्या होता है।
PRINT 1 PRINT 2 PRINT 3 GOTO Bookmark PRINT 4 Bookmark: PRINT 5 Bookmark: PRINT 6
परिणाम:
Msg 132, Level 15, State 1, Line 8 The label 'Bookmark' has already been declared. Label names must be unique within a query batch or stored procedure.
उदाहरण 3 - आउट-ऑफ-बैच लेबल
लेबल GOTO
. के समान बैच में होना चाहिए . यह वर्तमान बैच के बाहर किसी लेबल पर नहीं जा सकता।
किसी अन्य बैच में किसी लेबल पर जाने का प्रयास करने का एक उदाहरण यहां दिया गया है:
PRINT 1 PRINT 2 PRINT 3 GOTO Bookmark PRINT 4 GO PRINT 5 Bookmark: PRINT 6 GO
परिणाम:
Msg 133, Level 15, State 1, Line 6 A GOTO statement references the label 'Bookmark' but the label has not been declared.
इस मामले में, मैंने GO
. का इस्तेमाल किया कोड को दो बैचों में अलग करने का आदेश।
उदाहरण 4 - एक IF स्टेटमेंट में GOTO
आप GOTO
. का उपयोग कर सकते हैं एक IF
. में कथन, ताकि यह किसी शर्त के सही होने के आधार पर दिए गए कोड के टुकड़े पर कूद जाए।
यहां मैंने @color
. सेट किया है चर से Red
और इसलिए कोड Red_Team
. पर कूद जाता है ।
DECLARE @color varchar(50) = 'Red'; IF @color = 'Red' GOTO Red_Team IF @color = 'Blue' GOTO Blue_Team ELSE GOTO Other_Team Red_Team: PRINT 'Red Team'; GOTO Finish_Line Blue_Team: PRINT 'Blue Team'; GOTO Finish_Line Other_Team: PRINT 'Other Team'; GOTO Finish_Line Finish_Line: PRINT 'Finished!';
परिणाम:
Red Team Finished!
अगर मैं @color
सेट कर दूं तो क्या होगा करने के लिए Blue
:
DECLARE @color varchar(50) = 'Blue'; IF @color = 'Red' GOTO Red_Team IF @color = 'Blue' GOTO Blue_Team ELSE GOTO Other_Team Red_Team: PRINT 'Red Team'; GOTO Finish_Line Blue_Team: PRINT 'Blue Team'; GOTO Finish_Line Other_Team: PRINT 'Other Team'; GOTO Finish_Line Finish_Line: PRINT 'Finished!';
परिणाम:
Blue Team Finished!
और पूर्णता के लिए, अगर मैं एक अलग रंग प्रदान करता हूं तो क्या होता है:
DECLARE @color varchar(50) = 'Orange'; IF @color = 'Red' GOTO Red_Team IF @color = 'Blue' GOTO Blue_Team ELSE GOTO Other_Team Red_Team: PRINT 'Red Team'; GOTO Finish_Line Blue_Team: PRINT 'Blue Team'; GOTO Finish_Line Other_Team: PRINT 'Other Team'; GOTO Finish_Line Finish_Line: PRINT 'Finished!';
परिणाम:
Other Team Finished!
स्पष्ट रूप से ये बहुत ही सरल उदाहरण हैं, लेकिन ये GOTO
. की मूल अवधारणा को प्रदर्शित करते हैं ।
उदाहरण 5 - लेबल स्थिति
GOTO
ब्रांचिंग GOTO
. से पहले या बाद में परिभाषित लेबल पर जा सकती है ।
यहां GOTO
. से पहले किसी लेबल पर जाने का एक उदाहरण दिया गया है :
DECLARE @Counter int = 0; Loop: SET @Counter = @Counter + 1 IF @Counter < 10 PRINT @Counter ELSE GOTO Finish_Line GOTO Loop Finish_Line: PRINT 'Finished!'
परिणाम:
1 2 3 4 5 6 7 8 9 Finished!
GOTO
. से पहले लेबल लगाते समय आपको सावधान रहने की जरूरत है कि अनंत लूप शुरू न करें हालांकि।
साथ ही, यह उदाहरण केवल प्रदर्शन उद्देश्यों के लिए है। आप WHILE
. का उपयोग करके वही परिणाम प्राप्त कर सकते हैं लूप:
DECLARE @Counter int = 1; WHILE @Counter < 10 BEGIN PRINT @Counter SET @Counter = @Counter + 1 END PRINT 'Finished!'
परिणाम:
1 2 3 4 5 6 7 8 9 Finished!