আমি যে ডেটাবেস অ্যাপ্লিকেশনটির সাথে কাজ করি তাতে একটি সাধারণ প্যাটার্ন হ'ল একটি "পূর্বরূপ মোড" রয়েছে এমন প্রতিবেদন বা ইউটিলিটির জন্য একটি সঞ্চিত পদ্ধতি তৈরি করা দরকার। যখন এই জাতীয় পদ্ধতি আপডেট করে, এই প্যারামিটারটি নির্দেশ করে যে ক্রিয়াটির ফলাফলগুলি ফিরিয়ে দেওয়া উচিত, তবে পদ্ধতিটি আসলে ডেটাবেজে আপডেটগুলি সম্পাদন করা উচিত নয়।
এটি সম্পাদন করার একটি উপায় হ'ল if
প্যারামিটারের জন্য কেবল বিবৃতি রচনা করা এবং দুটি সম্পূর্ণ কোড ব্লক থাকা; যার মধ্যে একটি আপডেট করে এবং ডেটা দেয় এবং অন্যটি কেবল ডেটা দেয়। তবে কোড অনুলিপি এবং অপেক্ষাকৃত কম ডিগ্রির আত্মবিশ্বাসের কারণে এটি অনাকাঙ্ক্ষিত যে প্রাকদর্শন ডেটা আসলে কোনও আপডেটের সাথে কী ঘটবে তার সঠিক প্রতিচ্ছবি।
নিম্নলিখিত উদাহরণটি লেনদেনের সেভপয়েন্টগুলি এবং ভেরিয়েবলগুলি (যা লেনদেন দ্বারা প্রভাবিত হয় না, টেম্প টেবিলগুলির বিপরীতে) সরাসরি সম্প্রচারের মোডের জন্য লাইভ আপডেট মোড হিসাবে কোডের একক ব্লক ব্যবহার করার চেষ্টা করে।
দ্রষ্টব্য: লেনদেন রোলব্যাকগুলি কোনও বিকল্প নয় কারণ এই প্রক্রিয়া কলটি কোনও লেনদেনে নিজেই বাসা বাঁধতে পারে। এটি এসকিউএল সার্ভার ২০১২-তে পরীক্ষা করা হয়েছে।
CREATE TABLE dbo.user_table (a int);
GO
CREATE PROCEDURE [dbo].[PREVIEW_EXAMPLE] (
@preview char(1) = 'Y'
) AS
CREATE TABLE #dataset_to_return (a int);
BEGIN TRANSACTION; -- preview mode required infrastructure
DECLARE @output_to_return TABLE (a int);
SAVE TRANSACTION savepoint;
-- do stuff here
INSERT INTO dbo.user_table (a)
OUTPUT inserted.a INTO @output_to_return (a)
VALUES (42);
-- catch preview mode
IF @preview = 'Y'
ROLLBACK TRANSACTION savepoint;
-- save output to temp table if used for return data
INSERT INTO #dataset_to_return (a)
SELECT a FROM @output_to_return;
COMMIT TRANSACTION;
SELECT a AS proc_return_data FROM #dataset_to_return;
RETURN 0;
GO
-- Examples
EXEC dbo.PREVIEW_EXAMPLE @preview = 'Y';
SELECT a AS user_table_after_preview_mode FROM user_table;
EXEC dbo.PREVIEW_EXAMPLE @preview = 'N';
SELECT a AS user_table_after_live_mode FROM user_table;
-- Cleanup
DROP TABLE dbo.user_table;
DROP PROCEDURE dbo.PREVIEW_EXAMPLE;
GO
আমি এই কোড এবং ডিজাইনের ধরণ সম্পর্কে প্রতিক্রিয়া খুঁজছি, এবং / অথবা একই সমস্যার অন্যান্য সমাধান বিভিন্ন ফর্ম্যাটে উপস্থিত থাকলে।