यह सब आपके ग्राहक डेटा एक्सेस-लेयर पर निर्भर करता है। कई ओआरएम ढांचे सम्मिलित ऑपरेशन के दौरान SCOPE_IDENTITY को स्पष्ट रूप से पूछताछ पर भरोसा करते हैं।
यदि आप डेटा एक्सेस लेयर पर पूर्ण नियंत्रण में हैं तो आउटपुट पैरामीटर के रूप में SCOPE_IDENTITY() को वापस करने के लिए तर्कसंगत रूप से बेहतर है। परिणाम सेट में वापसी को लपेटने से परिणाम सेट का वर्णन करने के लिए अनावश्यक मेटा डेटा ओवरहेड जोड़ता है, और अनुरोध परिणामों को संसाधित करने के लिए कोड को जटिल करता है।
आप एक परिणाम सेट वापसी पसंद करते हैं, उसके बाद फिर से आउटपुट खंड का उपयोग करने के विवाद-योग्य बेहतर है:
INSERT INTO MyTable (col1, col2, col3)
OUTPUT INSERTED.id, col1, col2, col3
VALUES (@col1, @col2, @col3);
इस तरह आप डिफ़ॉल्ट और गणना स्तंभों सहित वापस पूरे डाला पंक्ति प्राप्त कर सकते हैं, और आपको एक परिणाम सेट मिलता है जिसमें प्रत्येक पंक्ति डालने के लिए एक पंक्ति होती है, यह सेट उन्मुख बैच आवेषण के साथ सही ढंग से काम कर रही है।
कुल मिलाकर, SCOPE_IDENTITY()
लौटने पर मुझे एक भी मामला नहीं दिखाई दे रहा है क्योंकि परिणाम सेट एक अच्छा अभ्यास होगा।
स्रोत
2010-06-29 17:08:58
एकाधिक प्रविष्टियां होने पर एकाधिक पंक्तियों को वापस करने पर अच्छा बिंदु। शायद जीबीएन ने आपको उस पर हरा दिया, लेकिन तुम्हारा और अधिक गहरा था। मेरे विशेष मामले में मैं एक ओआरएम का उपयोग नहीं कर रहा हूं और (अभी के लिए) एक साथ कई रिकॉर्ड नहीं डालेगा। –
@ रीमस: आपने कहा, "कुल मिलाकर, मैं परिणाम सेट के रूप में SCOPE_IDENTITY() को वापस लौटने पर एक भी मामला नहीं देख सकता, एक अच्छा अभ्यास होगा।" फिर यह और कैसे किया जा सकता है? क्या आप इसका मतलब है कि SCOPE_IDENTITY() का समग्र उपयोग खराब अभ्यास है? कृपया किस अर्थ में? – Fandango68
@ फर्नांडो68: मैं कह रहा हूं कि आपको आउटपुट पैरामीटर के रूप में इसे प्राप्त करना चाहिए, न कि परिणाम –