इस सवाल से प्रेरित होकर SET NOCOUNT पर अलग-अलग विचार हैं ...
क्या हमें SQL सर्वर के लिए SET NOCOUNT ON का उपयोग करना चाहिए? यदि नहीं, तो क्यों नहीं?
22 जुलाई 2011 को यह 6 को संपादित करता है
यह किसी भी डीएमएल के बाद "xx पंक्तियों से प्रभावित" संदेश को दबा देता है। यह एक परिणाम है और जब भेजा जाता है, तो ग्राहक को इसे संसाधित करना होगा। यह छोटा है, लेकिन औसत दर्जे का है (नीचे उत्तर देखें)
ट्रिगर्स आदि के लिए, क्लाइंट को कई "xx पंक्तियाँ प्रभावित" प्राप्त होंगी और यह कुछ ORM, MS Access, JPA आदि के लिए सभी प्रकार की त्रुटियों का कारण बनता है (नीचे संपादन देखें)
पृष्ठभूमि:
सामान्य स्वीकृत सर्वोत्तम अभ्यास (मुझे लगा कि इस प्रश्न तक) SET NOCOUNT ON
SQL सर्वर में ट्रिगर और संग्रहीत प्रक्रियाओं में उपयोग करना है। हम इसका हर जगह उपयोग करते हैं और एक त्वरित Google बहुत सारे SQL सर्वर MVP सहमत भी दिखाता है।
MSDN का कहना है कि यह एक .net SQLDataAdapter को तोड़ सकता है ।
अब, मेरे लिए इसका मतलब यह है कि SQLDataAdapter पूरी तरह से केवल CRUD प्रसंस्करण तक सीमित है क्योंकि यह "n पंक्तियाँ प्रभावित" संदेश को मिलान करने की अपेक्षा करता है। इसलिए, मैं उपयोग नहीं कर सकता:
- यदि डुप्लिकेट से बचने के लिए EXISTS (कोई प्रभावित संदेश नहीं पंक्तियाँ) नोट: सावधानी के साथ उपयोग करें
- जहां उम्मीद नहीं है (कम पंक्तियाँ तो उम्मीद थी
- तुच्छ अपडेट फ़िल्टर करें (उदाहरण के लिए कोई डेटा वास्तव में नहीं बदलता है)
- पहले कोई टेबल एक्सेस करें (जैसे लॉगिंग)
- जटिलता या निंदा छिपाएँ
- आदि
प्रश्न में marc_s (जो अपने SQL सामान को जानता है) का कहना है कि इसका उपयोग न करें। यह मेरे विचार से भिन्न है (और मैं खुद को एसक्यूएल में कुछ हद तक सक्षम मानता हूं)।
यह संभव है कि मैं कुछ याद कर रहा हूं (स्पष्ट इंगित करने के लिए स्वतंत्र महसूस करता हूं), लेकिन आप लोग क्या सोचते हैं?
नोट: मुझे इस त्रुटि को देखे हुए कई साल हो चुके हैं क्योंकि मैं आजकल SQLDataAdapter का उपयोग नहीं करता हूं।
टिप्पणियों और प्रश्नों के बाद संपादन:
संपादित करें: अधिक विचार ...
हमारे पास कई ग्राहक हैं: एक C # SQLDataAdaptor का उपयोग कर सकता है, दूसरा जावा से nHibernate का उपयोग कर सकता है। ये अलग-अलग तरीकों से प्रभावित हो सकते हैं SET NOCOUNT ON
।
यदि आप संग्रहीत procs को विधियों के रूप में मानते हैं, तो यह बुरा स्वरूप (एंटी-पैटर्न) है कि कुछ आंतरिक प्रसंस्करण अपने स्वयं के प्रयोजनों के लिए एक निश्चित तरीका काम करता है।
2 संपादित करें: एक ट्रिगर ब्रेकिंग एनहाइनेट प्रश्न , जहां SET NOCOUNT ON
सेट नहीं किया जा सकता है
(और नहीं, यह नहीं का डुप्लिकेट है, इस )
संपादित करें 3: फिर भी अधिक जानकारी, मेरे एमवीपी सहयोगी के लिए धन्यवाद
- KB 240882 , SQL 2000 और इससे पहले के डिस्कनेक्ट होने के कारण समस्या
- प्रदर्शन लाभ का डेमो
संपादन 4: 13 मई 2011
निर्दिष्ट नहीं होने पर भी Linq 2 SQL तोड़ता है?
संपादित करें 5: 14 जून 2011
JPA को तोड़ता है, तालिका चर के साथ संग्रहित खरीद: क्या JPA 2.0 SQL सर्वर तालिका चर का समर्थन करता है?
संपादन 6: 15 अगस्त 2011
SSMS "डेटा पंक्तियाँ संपादित करें" डेटा ग्रिड को SET NOCOUNT ON: GROUP BY के साथ अपडेट ट्रिगर की आवश्यकता होती है
संपादन 2013: ० 07 मार्च २०१३
@RemusRusanu से अधिक गहराई से विवरण:
क्या वास्तव में ऐसा प्रदर्शन करने से कोई फर्क पड़ता है