কেন এই CASE
অভিব্যক্তি:
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
এই ফলাফল উত্পাদন?
ত্রুটির বার্তা: এমএসজি 8180, স্তর 16, রাজ্য 1, লাইন 1
বিবৃতি প্রস্তুত করা যায়নি।
এমএসজি 125, স্তর 15, রাজ্য 4, লাইন 1
কেস এক্সপ্রেশন কেবল মাত্র 10 স্তরে নেস্ট করা যেতে পারে।
স্পষ্টতই CASE
এখানে নেস্টেড এক্সপ্রেশন নেই, যদিও এখানে 10 টিরও বেশি "শাখা" রয়েছে।
আরেকটি বিজোড়তা। এই ইনলাইন টেবিল-মূল্যযুক্ত ফাংশনটি একই ত্রুটি তৈরি করে:
ALTER FUNCTION [dbo].[fn_MyFunction]
(
@var varchar(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
)
তবে অনুরূপ একটি বহু-বিবৃতি টিভিএফ কাজ করে:
ALTER FUNCTION [dbo].[fn_MyFunction]
(
@var varchar(20)
)
RETURNS @result TABLE
(
value varchar(max)
)
AS
BEGIN
INSERT INTO @result
SELECT CASE column
WHEN 'a' THEN '1'
WHEN 'b' THEN '2'
... c -> i
WHEN 'j' THEN '10'
WHEN 'k' THEN '11'
END [col]
FROM LinkedServer.database.dbo.table
RETURN;
END
SELECT CASE v.V WHEN 'a' THEN 1 WHEN 'b' THEN 2 END FROM (VALUES ('a'), ('b')) AS v (V);
এবংSELECT CASE WHEN v.V = 'a' THEN 1 WHEN v.V = 'b' THEN 2 END FROM (VALUES ('a'), ('b')) AS v (V);
অনুবাদ ঠিক একই ফাঁসি পরিকল্পনা (নিজের জন্য যে যাচাই করার জন্য বিনা দ্বিধায়), যেখানে ক্ষেত্রে অভিব্যক্তি হিসাবে পুনরায় সংজ্ঞায়িত করা হয়CASE WHEN [Union1002]='a' THEN (1) ELSE CASE WHEN [Union1002]='b' THEN (2) ELSE NULL END END
- পাখির সঙ্গে, হিসাবে আপনি দেখতে পারেন।