मैं संग्रहीत प्रक्रिया से प्रभावित रिकॉर्ड की संख्या कैसे प्राप्त कर सकता हूं?


86

के लिए INSERT, UPDATEऔर DELETESQL डेटाबेस के खिलाफ सीधे निष्पादित बयान, सबसे डेटाबेस प्रदाताओं प्रभावित पंक्तियों की गिनती लौटने। संग्रहीत प्रक्रियाओं के लिए, प्रभावित रिकॉर्ड की संख्या हमेशा होती है -1

हम संग्रहीत प्रक्रिया से प्रभावित रिकॉर्ड की संख्या कैसे प्राप्त करते हैं?


1
सेट नो काउंट मेरी भी समस्या थी। परीक्षण करने के लिए, प्रबंधन स्टूडियो में अपनी संग्रहीत प्रक्रिया को निष्पादित करें और देखें कि क्या आपको गिनती मिलती है, यदि आप करते हैं, तो सुनिश्चित करें कि आपके पास आउटपुट संस्करण है।
user2624356 15

जवाबों:


80

संग्रहीत कार्यविधि के लिए एक आउट पैरामीटर दर्ज करें, और @@ROWCOUNTSQL सर्वर का उपयोग करने पर आधारित मान सेट करें । SQL%ROWCOUNTयदि आप Oracle का उपयोग कर रहे हैं तो उपयोग करें ।

ध्यान रखें कि यदि आपके पास कई हैं INSERT/UPDATE/DELETE, तो आपको @@ROWCOUNTप्रत्येक ऑपरेशन के लिए परिणाम को स्टोर करने के लिए एक चर की आवश्यकता होगी ।


46

@@RowCount आपको एसक्यूएल स्टेटमेंट से प्रभावित रिकॉर्ड की संख्या देगा।

@@RowCountकेवल काम करता है अगर आप इसे तुरंत बाद जारी करते हैं। इसलिए यदि आप गलतियाँ कर रहे हैं, तो आपको इसे उसी लाइन पर करना होगा। यदि आप इसे विभाजित करते हैं, तो आप जो भी दूसरा डालते हैं, उसमें से आपको याद करेंगे।

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR

यदि आपके पास कई कथन हैं, तो आपको प्रत्येक के लिए प्रभावित पंक्तियों की संख्या पर कब्जा करना होगा और उन्हें जोड़ना होगा।

SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR

33

मेरे लिए निकला SET NOCOUNT ONजो संग्रहित प्रक्रिया स्क्रिप्ट (SQL सर्वर प्रबंधन स्टूडियो पर डिफ़ॉल्ट रूप से) में सेट किया गया था और SqlCommand.ExecuteNonQuery();हमेशा -1 लौटा।

मैं बस इसे बंद सेट: SET NOCOUNT OFFउपयोग करने की आवश्यकता के बिना @@ROWCOUNT

अधिक विवरण यहां पाया गया है: SqlCommand.ExecuteNonQuery () इंसर्ट / अपडेट / डिलीट करते समय -1 देता है


यह मेरे लिए काम करता है। मेरा संग्रहित खरीद सिर्फ एक साधारण सम्मिलित कथन है, और यह काम करता हुआ प्रतीत होता है। धन्यवाद!
हार्वे डार्वे

धन्यवाद! संदर्भ पर अच्छा काम।
लियो गुरदीन

8

Microsoft SQL सर्वर के लिए आप @@ROWCOUNTसंग्रहीत कार्यविधि में अंतिम कथन से प्रभावित पंक्तियों की संख्या वापस करने के लिए चर वापस कर सकते हैं ।



-2

चेतावनी: @@ROWCOUNTवापस आ सकते हैं फर्जी डेटा यदि तालिका परिवर्तन किया जा रहा है चलाता इसे से जुड़े!

@@ROWCOUNTTRIGGER, न कि वास्तविक बयान से प्रभावित अभिलेखों की संख्या वापस आ जाएगी!


8
यह सच नहीं है: stackoverflow.com/questions/7005225/…
ताओ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.