উত্তর:
দ্রষ্টব্য, আপডেটের বিবৃতিগুলির জন্য প্রথম বন্ধনীগুলি প্রয়োজনীয়:
update top (100) table1 set field1 = 1
ORDER BY
সম্পূর্ণ ধারণাটি ছাড়া খুব TOP
বেশি অর্থ হয় না। শীর্ষের ধারণাটি অর্থবহ হওয়ার জন্য কোন দিকটি "আপ" এবং কোনটি "ডাউন" এর একটি ধারাবাহিক সংজ্ঞা আপনার থাকা দরকার।
তবুও এসকিউএল সার্ভার এটির অনুমতি দেয় তবে একটি নির্বিচার ফলাফলের গ্যারান্টি দেয় না ।
UPDATE TOP
গৃহীত উত্তরে সিনট্যাক্স একটি সমর্থন করে না ORDER BY
দফা কিন্তু এটি এখানে নীচে পছন্দসই হিসাবে সাজানোর ক্রম নির্ধারণ করার জন্য একটি কোটে বা উদ্ভুত টেবিল ব্যবহার করে নির্ণায়ক শব্দার্থবিদ্যা পেতে করা সম্ভব।
;WITH CTE AS
(
SELECT TOP 100 *
FROM T1
ORDER BY F2
)
UPDATE CTE SET F1='foo'
TOP
প্রতিকূলতাকে ব্যবহার করছেন তখন আপনার এটি ব্যবহার করা উচিত ORDER BY
কারণ আপনার আগ্রহী জিনিসটি কোনও কিছুর "সর্বাধিক" বা "কমপক্ষে" এর মতো like অন্য ক্ষেত্রে, তবে আপনি কেবল একটি ম্যাচের রেকর্ড পেতে আগ্রহী হতে পারেন। আমার মতো আজ! আমার একবারে ডেটা ইস্যু (চক্র) ঠিক করা দরকার। সম্পূর্ণ ফিক্স প্রক্রিয়াটিতে একটি ডিবি স্ক্রিপ্ট, কিছু ব্যবহারকারীর হস্তক্ষেপ এবং কিছু অ্যাপ্লিকেশন অপারেশন জড়িত। প্রথমে কোন রেকর্ডটি পরিচালনা করা হয়েছিল তা আমরা যত্ন করি নি। আমরা কেবল যত্ন করেছিলাম যে আমরা তাদের একবারে পরিচালনা করছি।
WHERE
আগের প্রক্রিয়াজাত রেকর্ডগুলি বাদ দেওয়ার জন্য আপনার কাছে একটি ধারা থাকতে হবে। লিখিত এবং স্বীকৃত উত্তর হিসাবে প্রশ্নটি বেশ অর্থহীন। বিটিডাব্লু: একটি সারি হিসাবে টেবিলগুলি ব্যবহার করার জন্য এটি বেশ দরকারী লিঙ্ক
where
বারবার একই সারিগুলি প্রক্রিয়াজাতকরণ এড়াতে আপনার একটি ধারা প্রয়োজন ।
আমার মতো যারা এখনও এসকিউএল সার্ভার 2000 এর সাথে আটকে আছেন, SET ROWCOUNT {number};
তারা UPDATE
ক্যোয়ারির আগে ব্যবহার করা যেতে পারে
SET ROWCOUNT 100;
UPDATE Table SET ..;
SET ROWCOUNT 0;
আপডেটটি 100 টি সারিতে সীমাবদ্ধ করবে
এটি এসকিউএল 2005 থেকে কমপক্ষে অবহেলা করা হয়েছে, তবে এসকিউএল 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
হয়?