দুটি বক্তব্যের শব্দার্থকতা পৃথক:
- কোনও সারি পাওয়া না গেলে প্রথমটি ভেরিয়েবলের মান সেট করে না।
- দ্বিতীয়টি সর্বদা চলক সেট করে, যদি কোনও সারি না পাওয়া যায় তবে নালও সহ।
কনস্ট্যান্ট স্ক্যানটি একটি খালি সারি তৈরি করে (কোনও কলাম ছাড়াই!) যার ফলে বেস টেবিলের সাথে কিছু না মিললে পরিবর্তনশীল আপডেট হবে updated বাম জয়েন্টটি নিশ্চিত করে যে খালি সারিটি জোড়ায় বেঁচে থাকবে। ভেরিয়েবল অ্যাসাইনমেন্টটি বাস্তবায়ন পরিকল্পনার মূল নোডে ঘটে যাওয়া হিসাবে ভাবা যেতে পারে।
ব্যবহার SELECT @result
-- Set initial value
DECLARE @result uniqueidentifier = {guid 'FE2CA909-1162-4C6C-A7AC-33B257E28539'};
-- @result does not change
SELECT @result = AccountId
FROM Accounts
WHERE AccountId={guid '7AD4D33C-1ED7-4183-B7F3-48C33D666525'};
SELECT @result;
ব্যবহার SET @result
-- Set initial value
DECLARE @result uniqueidentifier = {guid 'FE2CA909-1162-4C6C-A7AC-33B257E28539'};
-- @result set to null
SET @result =
(
SELECT AccountId
FROM Accounts
WHERE AccountId={guid '7AD4D33C-1ED7-4183-B7F3-48C33D666525'}
);
SELECT @result;
কার্যকর করার পরিকল্পনা রয়েছে
রুট নোডে কোনও সারি আসে না, সুতরাং কোনও অ্যাসাইনমেন্ট ঘটে না।
একটি সারি সর্বদা রুট নোডে উপস্থিত হয়, সুতরাং পরিবর্তনশীল অ্যাসাইনমেন্ট ঘটে।
অতিরিক্ত কনস্ট্যান্ট স্ক্যান এবং নেস্টেড লুপগুলি বাম আউটার জয়েন সম্পর্কে উদ্বিগ্ন হওয়ার মতো কিছু নয়। এটির বাইরের ইনপুটটিতে একটি সারি, এবং অন্তত ইনপুটটিতে সর্বাধিক এক সারি (আপনার উদাহরণে) এর মুখোমুখি হওয়ার গ্যারান্টিযুক্ত হওয়ায় বিশেষত যোগটি সস্তা cheap
একটি ভেরিয়েবল অ্যাসাইনমেন্ট ঘটে তা নিশ্চিত করার জন্য সাবকিউরি থেকে একটি সারি তৈরি হয়েছে তা নিশ্চিত করার অন্যান্য উপায় রয়েছে। একটি হ'ল রিডানড্যান্ট স্কেলার অগ্রিগেট (ক্লজ অনুসারে কোনও গ্রুপ নয়):
-- Set initial value
DECLARE @result uniqueidentifier = {guid 'FE2CA909-1162-4C6C-A7AC-33B257E28539'};
-- @result set to null
SET @result =
(
SELECT MAX(AccountId)
FROM Accounts
WHERE AccountId={guid '7AD4D33C-1ED7-4183-B7F3-48C33D666525'}
);
SELECT @result;
লক্ষ্য করুন যে স্কেলার সমষ্টিগুলি কোনও সারি ইনপুট না পেয়েও একটি সারি উত্পাদন করে।
ডকুমেন্টেশন:
যদি নির্বাচনের বিবৃতিটি কোনও সারি দেয় না, পরিবর্তনশীল তার বর্তমান মান ধরে রাখে। যদি অভিব্যক্তিটি কোনও স্কেলার সাবকোয়ারি হয় যা কোনও মান দেয় না, তবে ভেরিয়েবলটি NULL এ সেট করা হয়।
ভেরিয়েবলগুলি বরাদ্দের জন্য, আমরা আপনাকে প্রস্তাব দিচ্ছি যে আপনি SELECT @ লোকাল_ভরিয়েবলের পরিবর্তে SET @ লোকাল_ভরিভেবল ব্যবহার করুন।
আরও পড়া: