मैं डेटाबेस तालिका में शीर्ष 400 पंक्तियों को अद्यतन करना चाहता हूं। छद्म एसक्यूएल नीचे है, मैं यह कैसे कर सकता हूं?शीर्ष 400 कैसे अपडेट करें?
UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
AND column1 is null
मैं डेटाबेस तालिका में शीर्ष 400 पंक्तियों को अद्यतन करना चाहता हूं। छद्म एसक्यूएल नीचे है, मैं यह कैसे कर सकता हूं?शीर्ष 400 कैसे अपडेट करें?
UPDATE top (400) db.dbo.tbl
SET column1 = 2
WHERE column2 = 1
AND column1 is null
आप शीर्ष 400 कैसे निर्धारित करेंगे? बिना किसी आदेश के कोई गारंटी नहीं है कि एक ही सेट हमेशा चुना जाएगा और इस प्रकार गलत रिकॉर्ड अपडेट किए जा सकते हैं।
UPDATE db.dbo.tbl SET column1 = 2 WHERE
primaryID IN (
SELECT TOP (400) primarkyID FROM db.dbo.tbl
WHERE column2 = 1 AND column1 IS NULL
)
लेकिन मुझे यह पसंद नहीं है क्योंकि शीर्ष 400 की गारंटी देने का कोई तरीका नहीं है, तो आप कुछ अन्य प्रकार के मानदंडों को जोड़ना चाहेंगे। और यहां तक कि सबक्वायरी द्वारा एक आदेश भी।
आप शायद कुछ इस तरह की तलाश में हैं:
update db.dbo.tbl set column1 = 2
where ID in (
select top 400 ID from db.dbo.tbl
where column2 = 1 and column1 is null --the criteria have been moved here
order by ID --order by clause recommended
)
जहां आईडी तालिका के प्राथमिक कुंजी स्तंभ है।
है, आप क्वेरी में 'TOP' का उपयोग करने के बजाय 'set rowcount 400' का उपयोग भी कर सकते हैं http: // msdn .microsoft.com/en-us/library/ms188774.aspx – pjp
सिवाय इसके कि सेट ROWCOUNT बहिष्कृत है। –
@ डेव: क्या आप निश्चित हैं? मैं देख नहीं सकता कि एमएसडीएन दस्तावेज़ों में प्रलेखित http://msdn.microsoft.com/en-us/library/ms188774.aspx – pjp
यदि आप SQL Server 2008 का उपयोग कर रहे हैं, तो "शीर्ष एन" वाक्यविन्यास हटाएं और अद्यतन विवरणों पर काम करेगा। अन्यथा, यहां सूचीबद्ध अन्य विधियां जहां आप उपकुंजी या व्युत्पन्न तालिका में प्राथमिक कुंजी की पहचान करते हैं, वे अच्छी तरह से काम करेंगे। और जैसा कि अन्य ने किया है, "ऑर्डर बाय" की अत्यधिक अनुशंसा की जाती है या आपके द्वारा अपडेट की जाने वाली पंक्तियां एक क्वेरी से अगले तक भिन्न हो सकती हैं।
एसक्यूएल 2005 पर भी काम करता है, लेकिन ब्रैकेट की आवश्यकता है: टॉप (एन)। एसक्यूएल 2005 बीओएल, अद्यतन स्टेटमेंट, टॉप() खंड देखें। – Rick
WITH q AS
(
SELECT TOP 400 *
FROM db.dbo.tb
WHERE column2 = 1
AND column1 is null
ORDER BY
column3 -- choose your order!
)
UPDATE q
SET column2 = 2
@Quassnoi, बस उत्सुक है, उप-चयन के बजाय सीटीई का उपयोग करने का क्या फायदा है? –
'@ jmgant': आप 'ओरेकल', 'अद्यतन (शीर्ष 400 * चुनें ...) सेट में उप-चयन को अपडेट नहीं कर सकते ...' विफल हो जाएगा। दूसरों द्वारा प्रस्तावित एक 'आईएन' स्थिति का परिणाम केवल अतिरिक्त 'जॉइन' होता है जो यहां अनावश्यक है। – Quassnoi
इसके अलावा, यह तब भी काम करेगा जब आपके पास 'प्राथमिक कुंजी' नहीं है या आपके पास 'प्राथमिक कुंजी' है ('SQL सर्वर' में, आप 'IN' predicate में एक से अधिक कॉलम का उपयोग नहीं कर सकते) – Quassnoi
आप निम्न सिंटैक्स का उपयोग कर सकते हैं
अद्यतन शीर्ष (400) tbl सेट स्तम्भ 1 = '2' कहां कॉलम 2 = '1' और स्तम्भ 1 रिक्त है
यह पोस्ट देखें http://balasingam.com/sql-server/update-top-n-record-in-sql-server/comment-page-1#comment-227
सवाल क्या है? – RaYell
मुझे लगता है कि आप एसक्यूएल सर्वर का उपयोग कर रहे हैं। क्या ये सही है? एचएलजीईएम के उत्तर को भी ध्यान दें, इस बात की कोई गारंटी नहीं है कि जब भी आप इसमें कोई ऑर्डर नहीं करेंगे तब तक आपको यह प्रश्न तब तक चलाया जाएगा जब तक आप इस क्वेरी को नहीं चलाते। –
रीटैग किया गया, ऐसा करने के लिए आपको SQL सर्वर का उपयोग करना होगा क्योंकि कोई अन्य लोकप्रिय डीबीएमएस में शीर्ष 400 जैसे स्टेटमेंट – tekiegreg