আসুন ধরে নিন যে আপনার নিম্নলিখিত কোড রয়েছে (দয়া করে এটিকে ঘৃণা করুন তা উপেক্ষা করুন):
BEGIN TRAN;
DECLARE @id int
SELECT @id = id + 1 FROM TableA;
UPDATE TableA SET id = @id; --TableA must have only one row, apparently!
COMMIT TRAN;
-- @id is returned to the client or used somewhere else
আমার দৃষ্টিতে, এটি সামঞ্জস্যভাবে সঠিকভাবে পরিচালনা করছে না। কেবলমাত্র আপনার লেনদেন হওয়ার অর্থ এই নয় যে আপনার আপডেট বিবৃতি পাওয়ার আগে অন্য কেউ আপনার সমান মূল্য পড়বে না।
এখন, কোডটি যেমন রেখে দেওয়া হয়েছে (আমি বুঝতে পেরেছি এটি একটি একক বিবৃতি হিসাবে আরও ভালভাবে পরিচালনা করা হয়েছে বা স্বায়ত্তশাসন / পরিচয় কলাম ব্যবহার করা আরও ভাল) এটি সঠিকভাবে সামঞ্জস্য পরিচালনা করার উপায়গুলি এবং জাতি শর্তগুলি প্রতিরোধ করে যা দুটি ক্লায়েন্টকে একই পেতে দেয় আইডি মান?
আমি বেশ নিশ্চিত যে WITH (UPDLOCK, HOLDLOCK)
নির্বাচনটিতে একটি যুক্ত করা কৌশলটি করবে। SERIALIZABLE লেনদেন বিচ্ছিন্নতা স্তর পাশাপাশি কাজ বলে মনে হয় হবে যেহেতু এটি অস্বীকার অন্য কেউ পর্যন্ত Tran শেষ হয়ে গেছে আপনি কি পড়তে ( আপডেট । এই মিথ্যা মার্টিন দেখি উত্তর)। এটা কি সত্যি? তারা দুজনেই কি সমানভাবে কাজ করবে? একজনের কি অন্যের চেয়ে বেশি পছন্দ হয়?
কোনও আইডি আপডেটের চেয়ে আরও বৈধ কিছু করার কল্পনা করুন - এমন একটি রিডের উপর ভিত্তি করে কিছু গণনা যা আপনাকে আপডেট করতে হবে। এতে অনেকগুলি সারণী জড়িত থাকতে পারে, যার মধ্যে কয়েকটি আপনি লিখবেন এবং অন্যগুলি যা আপনি পাবেন না। এখানে সেরা অনুশীলন কি?
এই প্রশ্নটি লেখার পরে, আমি মনে করি লক ইঙ্গিতগুলি আরও ভাল কারণ তবে আপনি কেবল আপনার প্রয়োজনীয় টেবিলগুলি লক করছেন তবে আমি যে কারও ইনপুটকে প্রশংসা করব।
পিএস এবং না, আমি সর্বোত্তম উত্তরটি জানি না এবং সত্যিই আরও ভাল বোঝা পেতে চাই! :)
update
অপ্রচলিত ডেটার উপর ভিত্তি করে প্রকাশ করতে বাধা দিতে চান ? পরে যদি হয়, আপনিrowversion
কলামটি আপডেট করতে হবে কিনা তা পরীক্ষা করার জন্য এটি পড়ার পরে পরিবর্তন করা হয়নি।