SQL बैच, कथन और RPC के बीच अंतर?


35

SQL बैच, T- SQL स्टेटमेंट और रिमोट प्रोसीजर कॉल में क्या अंतर है?
मैं कैसे बता सकता हूं कि क्या टी-एसक्यूएल कोड का हिस्सा बैच या स्टेटमेंट है?

जवाबों:


25

खैर, मुझे लगता है कि आप ज्यादातर प्रोइलर कक्षाओं के बारे में बात कर रहे हैं, लेकिन स्पष्टीकरण वैसे भी खड़ा है।

एसक्यूएल बैच एक या एक से अधिक बयानों का समूह होता है जो एक साथ और एक GO स्टेटमेंट द्वारा अलग किया जाता है। ईजी: अधिक सिलेक्ट और INSERT स्टेटमेंट एक बैच बनाते हैं यदि उनके पास अंत में एक GO है।

आरपीसी कॉल एक कॉल है जो क्लाइंट एप्लिकेशन से डेटाबेस में आती है। ईजी: एक विंडोज़ सेवा, एक वेब एप्लिकेशन, एक विंडोज़ ऐप, जो भी डेटाबेस से कनेक्शन की आवश्यकता होती है वह वास्तव में आरपीसी कॉल करता है।

अब, Profiler में आपको वह सब कुछ दिखाई देगा जो डेटाबेस सर्वर को छूता है। किसी बाहरी अनुप्रयोग से प्रबंधन स्टूडियो, RPC कॉल (जो या तो बैच या संग्रहीत प्रक्रिया कॉल है) से एक बैच, प्रबंधन स्टूडियो से एक प्रक्रिया निष्पादन।

उनमें से प्रत्येक टीएसक्यूएल बयानों से बना है, इसलिए यह प्रोइलर वर्ग उपयोगी है यदि आप निष्पादन को और अधिक विस्तारित करना चाहते हैं, तो यह देखने के लिए कि क्या निष्पादित किया गया है। क्या सम्मिलित करता है, चयन करता है..सीटीसी।

Profiler में उन्हें देखने का सबसे आसान तरीका केवल एंड RPC कॉल या एंड बैच कॉल को सक्षम करना है और आपको वहां सभी आँकड़ों की आवश्यकता होगी (अवधि, IO, CPU)। फिर, TSQL स्टेटमेंट क्लास को सक्षम करके और गहरा खोदकर आगे बढ़ें।


4
+1 केवल निर्दिष्ट करने के लिए, GOहमारे द्वारा उपयोग किए जाने वाले लोकप्रिय क्लाइंट (यानी SSMS और sqlcmd) का स्वीकृत और डिफ़ॉल्ट बैच टर्मिनेटर है, लेकिन यह ध्यान देने योग्य है कि GOबैच टर्मिनेटर के रूप में वास्तविक स्ट्रिंग बदलने के लिए उत्तरदायी है और कॉन्फ़िगर करने योग्य है।
थॉमस स्ट्रिंगर

1
"एक आरपीसी कॉल (जो एक बैच या एक संग्रहीत प्रक्रिया कॉल है)" । तो सब कुछ आरपीसी अंत में है? क्या आप स्पष्ट कर सकते हैं?
इयान सैमुअल मैकलीन एल्डर

नहीं, मैं यह कहना चाहता था कि एक आरपीसी कॉल या तो संग्रहीत कार्यविधि कॉल या अधिक विवरणों के एक बैच से बनती है। आप वास्तव में इस Profiler घटना में क्या देखते हैं या तो एक ही प्रक्रिया या अधिक बयानों का एक बैच है।
मैरियन

कृपया यहाँ कुछ स्पष्टीकरण देखें । कुछ अन्य जानकारी यहाँ
मैरियन

14

बैच बनाम टी-एसक्यूएल स्टेटमेंट

यह SQL Server BOL में स्पष्ट रूप से परिभाषित है यहां है

एक बैच निष्पादन के लिए एक अनुप्रयोग से SQL सर्वर पर एक ही समय में भेजे गए एक या अधिक Transact-SQL स्टेटमेंट का एक समूह है। चले जाओ एक बैच सेपरेटर है जिसका उपयोग SSMS सहित अधिकांश क्लाइंट एप्लिकेशन में किया जाता है।

SQL सर्वर एक निष्पादन योग्य योजना में एक बैच के बयानों को संकलित करता है, जिसे निष्पादन योजना कहा जाता है। निष्पादन योजना में दिए गए कथनों को एक समय में निष्पादित किया जाता है।

मेरी समझ के आधार पर एक साधारण शब्द में RPC वह है जब आप क्लाइंट API (जैसे ADO.netOObject। Execute मेथड) का उपयोग करके एक संचित खरीद को निष्पादित करते हैं।

इंटरनेट न्यूज़ग्रुप पोस्टिंग में से एक में अधिक विस्तार से स्पष्टीकरण पाया गया है यहां दिया गया है :

RPC "बनाम" बैच "TDS निष्पादन मोड है जो ADO.NET (या कोई SQL सर्वर क्लाइंट) का उपयोग करता है। जब कोई मापदंडों के साथ एक सादे SQL कथन निष्पादित किया जाता है, तो हम" बैच "का उपयोग करते हैं। जब एक संग्रहित-निष्पादित किया जाता है। हम RPC का उपयोग करते हैं (यह RPC के रूप में स्टैंड-अलोन नेटवर्क दूरस्थ प्रक्रिया कॉल के समान नहीं है, हम बस इस मोड RPC को TDS (SQL Server नेटवर्क प्रोटोकॉल) में कहते हैं)। इसके अलावा, यदि आप पैरामीटर के साथ एक बैच निष्पादित करते हैं। हम वास्तव में एक संग्रहीत-खरीद का उपयोग करते हैं, जिसे sp_executesql कहा जाता है, और SQL कथन को स्वयं और बाकी के मापदंडों को पास करते हैं, इसलिए यह RPC के रूप में भी दिखाई देता है।

पाब्लो कास्त्रो
प्रोग्राम मैनेजर - ADO.NET टीम
Microsoft Corp.


इसलिए यदि बैच में एक भी बयान विफल रहता है, तो पूरे बैच को स्वचालित रूप से रोलबैक किया जाता है?
मॉन्स्टरमोरपीजी

नहीं, बैच में प्रत्येक कथन स्वायत्त रूप से प्रतिबद्ध है, जब तक कि बैच एक सक्रिय लेनदेन के अंदर नहीं होता है या आप IMPLICIT_TRANSACTIONS को चालू करते हैं। बैच और लेनदेन दो अलग-अलग अवधारणाएं हैं। मुझे पता है कि प्रश्न बहुत पुराना है, मैं इसे भविष्य के पाठकों के लिए यहां छोड़ रहा हूं।
स्पेगेटिडिबा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.