बैचों का वर्णन करें
T-SQL बैच एक या अधिक T-SQL कथनों का संग्रह हैं जो SQL सर्वर पर क्लाइंट द्वारा एकल इकाई के रूप में सबमिट किए जाते हैं। SQL सर्वर कोड को पार्स करने, ऑप्टिमाइज़ करने और निष्पादित करते समय एक ही समय में बैच में सभी कथनों पर काम करता है।
यदि आप एक रिपोर्ट लेखक हैं जो आमतौर पर कथनों का उपयोग करके प्रश्न लिखते हैं, न कि प्रक्रियाओं का उपयोग करके SELECT , फिर भी बैच सीमाओं को समझना महत्वपूर्ण है। ये सीमाएँ संग्रहीत प्रक्रियाओं और अन्य दिनचर्याओं में चर और पैरामीटर के साथ आपके काम को प्रभावित करती हैं। उदाहरण के लिए, एक चर को उसी बैच में घोषित किया जाना चाहिए जिसमें इसे संदर्भित किया गया है। इसलिए, यह पहचानना महत्वपूर्ण है कि बैच में क्या निहित है।
क्लाइंट अनुप्रयोग द्वारा बैच सीमांकित हैं। आप बैच के अंत को कैसे चिह्नित करते हैं यह आपके क्लाइंट की सेटिंग्स पर निर्भर करता है। SQL सर्वर प्रबंधन स्टूडियो (SSMS) और SQLCMD सहित Microsoft क्लाइंट के लिए कीवर्ड है GO।
इस उदाहरण में, दो अलग-अलग बैच हैं जिनमें से प्रत्येक को एक कथन GO के साथ समाप्त किया गया है:
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
बैच टर्मिनेटर GO एक T-SQL कीवर्ड नहीं है, लेकिन एक बैच के अंत को इंगित करने के लिए SSMS द्वारा मान्यता प्राप्त है।
जब आप टी-एसक्यूएल बैचों के साथ काम करते हैं तो दो महत्वपूर्ण बातों को ध्यान में रखें:
- बैच चर दायरे के लिए सीमाएं हैं, जिसका अर्थ है कि एक बैच में परिभाषित एक चर को केवल एक ही बैच में अन्य कोड द्वारा संदर्भित किया जा सकता है
- कुछ कथन, आमतौर पर डेटा परिभाषा कथन जैसे ,
CREATE VIEW,CREATE FUNCTIONऔरCREATE PROCEDUREएक ही बैच में दूसरों के साथ संयोजित नहीं किए जा सकते हैं।
बैचों के साथ कार्य करना
एक बैच पार्स और निष्पादन के लिए SQL सर्वर को प्रस्तुत T-SQL स्टेटमेंट का एक संग्रह है। यह समझना कि बैचों को कैसे पार्स किया जाता है, त्रुटि संदेशों और व्यवहार की पहचान करने में उपयोगी है। जब कोई बैच किसी क्लाइंट द्वारा सबमिट किया जाता है, जैसे कि जब आप SSMS में निष्पादित करें बटन दबाते हैं, तो SQL सर्वर इंजन द्वारा सिंटैक्स त्रुटियों के लिए बैच पार्स किया जाता है. पाई गई कोई भी त्रुटि पूरे बैच को अस्वीकार कर देती है; बैच के भीतर बयानों का कोई आंशिक निष्पादन नहीं है।
बैच सिंटैक्स जाँच पास करता है, तो उसके बाद SQL सर्वर अन्य चरण चलाता है, ऑब्जेक्ट नाम हल करने, अनुमतियों की जाँच करने और निष्पादन के लिए कोड ऑप्टिमाइज़ कर रहा है। एक बार जब यह प्रक्रिया पूरी हो जाती है और निष्पादन शुरू हो जाता है, तो कथन व्यक्तिगत रूप से सफल या विफल होते हैं। यह सिंटैक्स जाँच के लिए एक महत्वपूर्ण विपरीत है। जब एक लाइन पर रनटाइम त्रुटि होती है, तो अगली पंक्ति अभी भी निष्पादित हो सकती है, जब तक कि आप कोड में त्रुटि हैंडलिंग नहीं जोड़ते।
उदाहरण के लिए, निम्न बैच में सिंटैक्स त्रुटि है:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
यह त्रुटि संदेश देता है:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
पंक्ति 1 में त्रुटि उत्पन्न हुई, लेकिन पूरा बैच अस्वीकार कर दिया गया है, और निष्पादन पंक्ति 2 के साथ जारी नहीं है। यहां तक कि अगर प्रत्येक कथन को INSERT उलट दिया गया था और दूसरी पंक्ति में सिंटैक्स त्रुटि हुई थी, तो फ्रंटलाइन को निष्पादित नहीं किया जाएगा क्योंकि पूरे बैच को अस्वीकार कर दिया जाएगा।
इसके विपरीत, इस सही बैच में कोई त्रुटि नहीं है:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
पिछले नमूने बयानों का उपयोग करते INSERT हैं, बजाय इसके कि SELECT संशोधन कथनों को आमतौर पर बैचों में समूहीकृत किया जाता है।