2009-09-28 14 views
8

मुझे किसी शर्त को पूरा करने वाली तालिका में पहली एन पंक्तियों को अपडेट करने की आवश्यकता है।मैं तालिका में एन पंक्तियों को कैसे अपडेट करूं?

मुझे पता है कि मैं एक अद्यतन शीर्ष एन कर सकता हूं ... लेकिन समस्या यह है कि एन @ variable में है।

अद्यतन शीर्ष @ एन सेट ... काम नहीं करता है।

क्या ऐसा करने का कोई तरीका है कि मैं अभी याद कर रहा हूं?

यहां कोई विशिष्ट तालिका परिभाषा नहीं है क्योंकि इससे कोई फर्क नहीं पड़ता कि कॉलम क्या हैं .. यदि मैं इसे एक कॉलम टेबल के लिए कर सकता हूं तो मैं इसे अपनी तालिका के लिए कर सकता हूं।

उत्तर

16

आप TOP खंड के बाद कोष्ठक का उपयोग करने के लिए जब आप एक चर का उपयोग करना चाहते की जरूरत है:

UPDATE TOP(@N) ... 
+0

कूल चाल! मुझे यह सिखाने के लिए धन्यवाद। दिलचस्प बात यह है कि यह वाक्यविन्यास 'चयन शीर्ष एन' निर्माण के साथ काम नहीं करता है। मैं ऐसा क्यों कर सकता हूं, हालांकि यह कुछ हद तक टीएसक्यूएल में एक विषम असमानता है। – mjv

+0

'SELECT TOP n' केवल तभी काम करता है जब 'n' स्थिर है, एक चर नहीं। यह 2005 से पहले इस तरह काम करता था। एक शीर्ष तर्क के साथ 'टॉप' और डीएमएल कथन के लिए 'TOP' 2005 से जोड़ा गया है और माता-पिता की आवश्यकता है। –

+0

यह वास्तव में अच्छा होगा, हालांकि, "शीर्ष (@ एन) सेट systemuserid = @ID अपडेट करें जहां systemuserid शून्य है" मुझे "देता है" कीवर्ड 'सेट' के पास गलत वाक्यविन्यास "। – Moose

10
WITH q AS 
     (
     SELECT TOP (@r) * 
     FROM mytable 
     ORDER BY 
       col1 
     ) 
UPDATE q 
SET  co12 = @value 

UPDATE TOP (@r) काम करेगा लेकिन यह किसी विशेष क्रम में किसी भी @r पंक्तियों अद्यतन करेगा।

documentation से:

पंक्तियों TOP अभिव्यक्ति में संदर्भित, INSERT के साथ प्रयोग किया UPDATE, या DELETE किसी भी क्रम में व्यवस्थित नहीं कर रहे हैं। TOP nn यादृच्छिक पंक्तियां देता है।

+0

'@ केएम': इस बार मैंने कथन को सही किया * पहले * आपने इंगित किया :) – Quassnoi

+0

+1, मुझे सीखने के लिए सुना है, इसलिए मैंने बहुत सारे कोड को आजमाया, कभी सीटीई का अद्यतन नहीं देखा, मैं उस छोटे से खेलना है ... –

+0

'@ केएम': डुप्लीकेट हटाने के लिए बहुत उपयोगी है। http://explainextended.com/2009/03/14/deleting-duplicates/ – Quassnoi

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