जवाबों:
ध्यान दें, अद्यतन विवरण के लिए कोष्ठक आवश्यक हैं:
update top (100) table1 set field1 = 1
ORDER BY
पूरे विचार के बिना कोई TOP
मतलब नहीं है। आपको इस बात की लगातार परिभाषा होनी चाहिए कि कौन सी दिशा "ऊपर" है और जो शीर्ष की अवधारणा के लिए सार्थक है।
फिर भी SQL सर्वर इसे अनुमति देता है लेकिन एक नियतात्मक परिणाम की गारंटी नहीं देता है ।
UPDATE TOP
स्वीकार किए जाते हैं जवाब में वाक्य रचना एक का समर्थन नहीं करता ORDER BY
खंड लेकिन इसे यहाँ नीचे के रूप में वांछित सॉर्ट क्रम को परिभाषित करने के लिए एक CTE या व्युत्पन्न तालिका का उपयोग करके नियतात्मक अर्थ विज्ञान पाने के लिए संभव है।
;WITH CTE AS
(
SELECT TOP 100 *
FROM T1
ORDER BY F2
)
UPDATE CTE SET F1='foo'
TOP
बाधाओं का उपयोग कर रहे हैं, तो आपको इसका उपयोग करना चाहिए ORDER BY
क्योंकि आप जिस चीज में रुचि रखते हैं वह किसी चीज के "सबसे" या "कम से कम" की तरह है। हालांकि, अन्य मामलों में, आप केवल एक मिलान रिकॉर्ड प्राप्त करने में रुचि रख सकते हैं। आज मेरी तरह! मुझे एक समय में डेटा मुद्दों (चक्र) को ठीक करने की आवश्यकता थी। संपूर्ण फिक्स प्रक्रिया में एक db स्क्रिप्ट, कुछ उपयोगकर्ता हस्तक्षेप और कुछ एप्लिकेशन ऑपरेशन शामिल थे। हमें ध्यान नहीं था कि कौन सा रिकॉर्ड पहले संभाला गया था। हमने सिर्फ इतना ध्यान दिया कि हम उन्हें एक बार में संभाल रहे थे।
WHERE
पहले से संसाधित रिकॉर्ड को बाहर करने के लिए एक खंड होगा । लिखित और स्वीकृत उत्तर के रूप में प्रश्न बहुत ही व्यर्थ है। BTW: एक कतार के रूप में तालिकाओं का उपयोग करने के लिए यह काफी उपयोगी कड़ी है
where
ही पंक्तियों को बार-बार संसाधित करने से बचने के लिए एक खंड की आवश्यकता होगी ।
मेरे जैसे उन लोगों के लिए जो अभी भी SQL Server 2000 से चिपके हुए हैं, क्वेरी SET ROWCOUNT {number};
से पहले उपयोग किए जा सकते हैंUPDATE
SET ROWCOUNT 100;
UPDATE Table SET ..;
SET ROWCOUNT 0;
अद्यतन को 100 पंक्तियों तक सीमित कर देगा
यह SQL 2005 के बाद से कम से कम हटा दिया गया है, लेकिन SQL 2017 के रूप में यह अभी भी काम करता है। https://docs.microsoft.com/en-us/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-2017
यहां तक कि कूलर भी तथ्य यह है कि आप एक इनलाइन टेबल-वेल्यूड फंक्शन का उपयोग कर सकते हैं, जिसे TOP
अपडेट करने के लिए (और कितने के माध्यम से ) पंक्ति का चयन करें। अर्थात्:
UPDATE MyTable
SET Column1=@Value1
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 MyTable.SomeColumn=@Param1 AND ...
ORDER BY MyTable.SomeDate DESC
)
..., और वहां (मेरी विनम्र राय में) केवल शीर्ष चयनित पंक्तियों को नियत रूप से अद्यतन करने की सच्ची शक्ति है, जबकि एक ही समय में UPDATE
बयान के वाक्य विन्यास को सरल बनाना है ।
प्रयत्न:
UPDATE Dispatch_Post
SET isSync = 1
WHERE ChallanNo
IN (SELECT TOP 1000 ChallanNo FROM dbo.Dispatch_Post ORDER BY
CreatedDate DESC)
तुम भी उपनाम का उपयोग कर चयन से अद्यतन और शामिल हो सकते हैं:
UPDATE TOP (500) T
SET T.SomeColumn = 'Value'
FROM SomeTable T
INNER JOIN OtherTable O ON O.OtherTableFK = T.SomeTablePK
WHERE T.SomeOtherColumn = 1
order by
रूप में अच्छी तरह से उपयोग करने के लिए ?