Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में GOTO का उपयोग कैसे करें

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!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बल्क इंसर्ट निश्चित चौड़ाई वाले क्षेत्र

  2. एक्सेल डेट सीरियल नंबर को रेगुलर डेट में बदलें

  3. SQL सर्वर प्रतिस्थापन () बनाम अनुवाद ():अंतर क्या हैं?

  4. SQL सर्वर (T-SQL) में एक विभाजन को स्विच-आउट करें

  5. SQL सर्वर में दिनांक और समय को कैसे प्रारूपित करें