2009-07-29 19 views
303

में शीर्ष 100 रिकॉर्ड कैसे अपडेट कर सकता हूं मैं SQL सर्वर में शीर्ष 100 रिकॉर्ड्स अपडेट करना चाहता हूं। मेरे पास T1 फ़ील्ड F1 और F2 के साथ एक तालिका है। T1 में 200 रिकॉर्ड हैं। मैं शीर्ष 100 रिकॉर्ड में F1 फ़ील्ड को अपडेट करना चाहता हूं। मैं SQL सर्वर में TOP 100 के आधार पर अपडेट कैसे कर सकता हूं?मैं एसक्यूएल सर्वर

+0

यह लिंक आपको मदद कर सकता है http://www.codefari.com/2015/10/how-can-i-update-top-10-records-in-sql.html – Singh

उत्तर

522

ध्यान दें, कोष्ठकों अद्यतन बयान के लिए आवश्यक हैं:

update top (100) table1 set field1 = 1 
+16

कोई भी सुझाव 'ऑर्डर का उपयोग कैसे करें साथ ही '? –

+4

@ जोपहिलिप्स – jjxtra

+0

द्वारा ऑर्डर के लिए मार्टिन स्मिथ के उत्तर का उपयोग करें, हालांकि यह शीर्ष 100 रिकॉर्ड नहीं हैं, लेकिन केवल 100 मनमाने ढंग से चुने गए रिकॉर्ड हैं। शीर्ष 100 में रिकॉर्ड्स को रैंक करने के लिए कुछ ऑर्डर शामिल होंगे। –

9
update tb set f1=1 where id in (select top 100 id from tb where f1=0) 
+15

इस निर्माण का उपयोग करना धीमा धीमा है ... – Lu4

242

एक ORDER BY बिना TOP के पूरे विचार बहुत मतलब नहीं है। आपको एक निरंतर परिभाषा की आवश्यकता है कि कौन सी दिशा "ऊपर" है और जो शीर्ष की अवधारणा के लिए सार्थक होने के लिए "नीचे" है।

फिर भी SQL सर्वर इसे अनुमति देता है लेकिन doesn't guarantee a deterministic result

स्वीकृत उत्तर में UPDATE TOP वाक्यविन्यास ORDER BY खंड का समर्थन नहीं करता है, लेकिन नीचे दिए गए वांछित सॉर्ट ऑर्डर को परिभाषित करने के लिए सीटीई या व्युत्पन्न तालिका का उपयोग करके यहां निर्धारक अर्थशास्त्र प्राप्त करना संभव है।

;WITH CTE AS 
( 
SELECT TOP 100 * 
FROM T1 
ORDER BY F2 
) 
UPDATE CTE SET F1='foo' 
+16

डाउनवोट के कारण? 'ऑर्डर' के बिना 'TOP' ** ** अर्थहीन है। आपको बस एक अपरिभाषित '100' पंक्तियां मिलती हैं। –

+0

अर्थहीन है कि किसी वास्तविक दुनिया में – Rohit

+57

का उपयोग नहीं किया गया है, आप अर्थहीन कहते हैं लेकिन यह सच नहीं है।मैं मानता हूं कि,/आमतौर पर /, जब आप 'TOP' बाधाओं का उपयोग कर रहे हैं, तो आपको इसे' ORDER BY' 'के साथ उपयोग करना चाहिए क्योंकि आप जो चाहते हैं उसमें "सबसे अधिक" या "कम से कम" की तरह है। अन्य मामलों में, हालांकि, आप केवल एक मिलान रिकॉर्ड प्राप्त करने में रुचि रखते हैं। आज मुझे पसंद है! मुझे एक समय में डेटा मुद्दों (चक्र) को ठीक करने की आवश्यकता थी। पूरी फिक्स प्रक्रिया में एक डीबी स्क्रिप्ट, कुछ उपयोगकर्ता हस्तक्षेप, और कुछ अनुप्रयोग संचालन शामिल थे। हमें परवाह नहीं था कि किस रिकॉर्ड को पहले संभाला गया था। हमने बस देखभाल की कि हम उन्हें एक समय में संभालने वाले थे। – MetaFight

12
मेरे जैसे उन अभी भी SQL सर्वर 2000 के साथ फंस के लिए

, SET ROWCOUNT {number};UPDATE क्वेरी

SET ROWCOUNT 100; 
UPDATE Table SET ..; 
SET ROWCOUNT 0; 

से पहले इस्तेमाल किया जा सकता यह कम से कम पदावनत किया गया है 100 पंक्तियां

करने के लिए अद्यतन को सीमित कर देगा एसक्यूएल 2005 के बाद से, लेकिन एसक्यूएल 2012 के रूप में यह अभी भी काम करता है। संपादित करें: यह SQL 2014 में मारे गए थे। सेट ROWCOUNT का उपयोग SQL सर्वर 2014 और ऊपर में DELETE, INSERT, और UPDATE कथन को प्रभावित नहीं करेगा।

+0

सेट ROWCOUNT ट्रिगर्स को प्रभावित करता है साथ ही आदेश को अद्यतन किया जाता है। यदि आपके पास कैस्केड डिलीट सेट है, तो यह बच्चे की तालिका में बाल पंक्तियों की पंक्ति संख्या से अधिक होने पर लेनदेन में विफल हो सकती है। – EricI

+0

इसके साथ, सेट ROWCOUNT @RowCountParameter; मान्य वाक्यविन्यास है, जबकि तालिका शीर्ष से ऊपर @RowCountParamter चुनें * अवैध है। यदि आपको अद्यतन होने वाली पंक्तियों को कॉन्फ़िगर करने की आवश्यकता है, तो SET ROWCOUNT # वर्तमान में बेहतर विकल्प है, बशर्ते आपके पास कैस्केड डिलीट सक्षम के साथ बाल तालिकाओं न हों। – EricI

3

क्या भी कूलर है तथ्य यह है कि आप जो (और के माध्यम से TOP कितने) पंक्ति (यों) को अद्यतन करने का चयन करने के एक इनलाइन टेबल-वैल्यूड समारोह का उपयोग कर सकते है। यही कारण है:

UPDATE MyTable 
SET [email protected] 
FROM tvfSelectLatestRowOfMyTableMatchingCriteria(@Param1,@Param2,@Param3) 

तालिका महत्वपूर्ण समारोह के लिए आप पंक्ति का चयन करने के कुछ दिलचस्प है की तरह अद्यतन करने के लिए:

CREATE FUNCTION tvfSelectLatestRowOfMyTableMatchingCriteria 
(
    @Param1 INT, 
    @Param2 INT, 
    @Param3 INT 
) 
RETURNS TABLE AS RETURN 
(
    SELECT TOP(1) MyTable.* 
    FROM MyTable 
    JOIN MyOtherTable 
     ON ... 
    JOIN WhoKnowsWhatElse 
     ON ... 
    WHERE [email protected] AND ... 
    ORDER BY MyTable.SomeDate DESC 
) 

..., और (मेरी विनम्र राय में) वहाँ झूठ असली शक्ति UPDATE कथन के सिंटैक्स को सरल बनाने के साथ ही केवल शीर्ष चयनित पंक्तियों को निर्धारित करने के लिए।

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