2009-07-29 17 views
75

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

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

+1

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

उत्तर

74

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

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

8

माइक्रोसॉफ्ट एसक्यूएल सर्वर के लिए आप संग्रहीत प्रक्रिया में अंतिम कथन से प्रभावित पंक्तियों की संख्या को वापस करने के लिए @@ ROWCOUNT चर वापस कर सकते हैं।

41

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

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

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

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

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

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

@@ROWCOUNT ट्रिगर द्वारा प्रभावित रिकॉर्ड्स की संख्या वापस करेगा, वास्तविक बयान नहीं!

+8

यह पता चलता है कि यह सच नहीं है: http://stackoverflow.com/questions/7005225/sql-server-does-trigger-affects-rowcount – Tao

25

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

मैंने इसे अभी सेट किया है: SET NOCOUNT OFF@@ROWCOUNT का उपयोग किए बिना।

अधिक जानकारी यहां पाया: SqlCommand.ExecuteNonQuery() returns -1 when doing Insert/Update/Delete

+0

यह मेरे लिए काम करता है। मेरी संग्रहित प्रो सिर्फ एक साधारण सम्मिलित बयान है, और ऐसा लगता है कि यह काम कर रहा है। धन्यवाद! –

+0

धन्यवाद! संदर्भ पर अच्छा काम। –

संबंधित मुद्दे

 संबंधित मुद्दे