2012-09-15 17 views
11

में क्वेरी चलाने से पहले कितनी पंक्तियां प्रभावित होंगी, मैंने ROWCOUNT के बारे में कुछ पढ़ा है, लेकिन यह बिल्कुल ठीक नहीं है कि मैं क्या देख रहा हूं। मेरी समझ से पंक्ति गणना आपके द्वारा क्वेरी चलाने के बाद प्रभावित पंक्तियों की संख्या बताती है। आप जो खोज रहे हैं उसे जानने के पहले आप जानना चाहते हैं। क्या यह संभव है?माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008

+0

नहीं यह संभव नहीं दो प्रश्नों कर के बिना है। यद्यपि आपको ऐसा करने की ज़रूरत क्यों है? अनुरोध के कारण के आधार पर आप पूछताछ कर सकते हैं कि क्वेरी '@@ ROWCOUNT' जांचें, फिर इसे अपेक्षित होने पर प्रतिबद्ध करें। या क्वेरी के साथ पंक्ति गणना को वापस करने के लिए 'COUNT (*) ओवर()' का उपयोग करें। –

उत्तर

10

लघु जवाब है नहीं ..

आप एसक्यूएल सर्वर में query..atleast निष्पादित करने से पहले पंक्तियों की संख्या नहीं मिल सकता है।

यह करने के लिए सबसे अच्छा तरीका है,

Select count(*) from <table> where <condtion> 

का उपयोग तो

[delete]or [update] [set col='val'] 
from <table> where <condtion> 
+0

हालांकि आप प्रभावित होने वाली पंक्तियों की कुल संख्या प्राप्त करने के लिए SQL सर्वर विश्लेषणात्मक कार्यों का उपयोग कर सकते हैं। लेकिन यह केवल रनटाइम पर है। – rvphx

+0

हमेशा सही नहीं होगा क्योंकि अद्यतन पंक्तियों को छोड़ देगा जहां कुछ भी बदलने की आवश्यकता नहीं है। उदाहरण के लिए: नया मान और पुराना मान पहले से ही समान है। –

+0

@ हिमांशु सैनी: जहां तक ​​मुझे पता है, SQL सर्वर यह जांच नहीं करेगा कि अद्यतन करने से पहले पुराने और नए मान समान हैं या नहीं। यह बस मिलान की स्थितियों के साथ सभी रिकॉर्ड अद्यतन करता है। अगर आपके पास इसके बारे में कोई दस्तावेज है तो कृपया साझा करें। यह मेरे लिए नई शिक्षा होगी –

1

सरल समाधान SELECT * FROM... में SELECT Count(*) FROM ... के साथ कॉलम को प्रतिस्थापित करना है और आपके शेष प्रश्न (WHERE खंड को समान होने की आवश्यकता है) इसे चलाने से पहले। यह आपको बताता है कि कितने पंक्तियों प्रभावित हो जाएगा

3

अनुमान कार्य योजना लागू करके आप पंक्तियों देने के लिए जा रहा है आंकड़ों के आधार पर प्रभावित अपने वास्तविक क्वेरी निष्पादित है, इसलिए यह जीत लिया ' टी वास्तव में इस मामले में आपकी मदद नहीं करता है।

जो मैं अनुशंसा करता हूं वह आपके UPDATE statement या DELETE statement की प्रतिलिपि बना रहा है और इसे SELECT में बदल रहा है। यह देखने के लिए कि कितनी पंक्तियां वापस आती हैं और आपके पास यह जवाब है कि कितनी पंक्तियां अपडेट या हटा दी गई होंगी।

उदाहरण के लिए:

UPDATE t 
SET t.Value = 'Something' 
FROM MyTable t 
WHERE t.OtherValue = 'Something Else' 

हो जाता है:

SELECT COUNT(*) 
FROM MyTable t 
WHERE t.OtherValue = 'Something Else' 
5

तुम भी BEGIN TRANSACTION उपयोग करने से पहले आपरेशन निष्पादित किया जाता है। आप प्रभावित पंक्तियों की संख्या देख सकते हैं। वहां से, परिणामों को कम करें या डेटा को वापस मूल स्थिति में रखने के लिए रोलबैक का उपयोग करें।

लेन-देन शुरू

अद्यतन तालिका सेट col = 'कुछ' जहां col2 = 'कुछ और';

कमिट/रोलबैक

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