2012-06-12 12 views
9

में शीर्ष 100 पंक्तियां अपडेट कर सकते हैं मैं जानता हूँ कि मानक SQL में आप यह कर सकते हैं कि:मैं कैसे डीबी 2

update top (100) table1 set field1 = 1 

(संदर्भ: how can I Update top 100 records in sql server)

लेकिन इस डीबी 2 में अनुमति नहीं है। क्या कोई मुझे सलाह दे सकता है कि डीबी 2 में एक ही परिणाम कैसे पूरा किया जाए? धन्यवाद!

+1

'टॉप x' SQL मानक में नहीं है, यह एक विस्तार एमएस एसक्यूएल सर्वर (और शायद Sybase) के लिए अद्वितीय है। ['पहले x ROWS' प्राप्त करें] (http://en.wikipedia.org/wiki/Select_ (SQL) #FETCH_FIRST_clause) SQL में प्रस्तुत किया गया था: 2008 – bhamby

उत्तर

16

यह हालांकि आप परिणाम आप उम्मीद ...

पहले नहीं मिल सकता है, हमेशा याद है कि SQL स्वाभाविक अव्यवस्थित है dooable है। इसका मतलब है कि ऐसी कोई बात नहीं है 'शीर्ष' पंक्तियों के रूप में, जब तक कि आप स्पष्ट रूप से परिभाषित न करें कि आपका क्या मतलब है। अन्यथा, आपके परिणाम 'यादृच्छिक' (sortof) हैं।

भले ही, इस , dooable है मानते हुए आप मेज पर अद्वितीय कुंजी के कुछ प्रकार है:

UPDATE table1 SET field1 = 1 
WHERE table1Key IN (SELECT table1Key 
        FROM table1 
        WHERE field1 <> 1 
        ORDER BY field1 
        FETCH FIRST 100 ROWS ONLY) 

क्यों आप एक बार में केवल 100 पंक्तियां अपडेट करना चाहते हैं? आप वास्तव में किस तरह की समस्या हल करने की कोशिश कर रहे हैं?

+1

दुर्भाग्यवश पंक्तियों पर कोई अद्वितीय पहचानकर्ता नहीं है, जो मज़े में जोड़ता है , लेकिन मुझे आपके द्वारा प्रदान किए गए उदाहरण के आधार पर एक समान समाधान मिला है, इसलिए धन्यवाद। 100 कठोर सीमा नहीं है, बल्कि हजारों रिकॉर्ड होने पर पूरी तालिका को पकड़ने से बचाने का एक तरीका है। अनिवार्य रूप से, मेरे पास एक जेईई सर्वर पर एक निर्धारित प्रक्रिया है जो इस तालिका में रिकॉर्ड्स की जांच करने वाले कई उदाहरणों में चलती है, उन्हें एक समय में 100 पकड़ती है और उन्हें किसी अन्य स्थान पर संसाधित करती है। मैं बैच आईडी के साथ पहले 100 को चिह्नित करना चाहता हूं, उन्हें चुनें, लूप के माध्यम से और प्रक्रिया करें, फिर बैच आईडी –

+1

द्वारा हटाएं मुझे पता चला है कि इसे थोड़ा कम वर्बॉस्ली किया जा सकता है: 'अद्यतन करें (तालिका 1 से तालिका 1 से 1 फ़ील्ड <1 1 फील्ड 1 द्वारा ऑर्डर केवल पहले 100 पंक्तियां) SET फ़ील्ड 1 = 1' –

2

क्या आप RRN का उपयोग कर सकते हैं (यदि आप केवल अपडेट की संख्या सीमित करने के बारे में चिंतित हैं)?

उदाहरण के लिए

:

update mytable a set a.field = 'foo' where RRN(a) < 200 
+0

इस तरह की प्रक्रिया के लिए नहीं। आरआरएन() गैर-अस्थिर फ़ाइल के लिए ठीक है, लेकिन इस फ़ाइल में पंक्तियां डाली गई हैं और हटा दी गई हैं। डिफ़ॉल्ट रूप से, SQL तालिकाओं में REUSEDLT (* हाँ) होगा, इसलिए पंक्तियों को पहले हटाई गई पंक्तियों के स्लॉट में डाला जा सकता है। बैच संख्या के साथ गलत पंक्तियों को अपडेट करना बहुत आसान होगा, या शायद आरआरएन() = 1 में डाली गई पंक्ति को और भी खराब कर दें। – user2338816

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