Чому цей 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
Даєте цей результат?
Повідомлення про помилку: Msg 8180, Рівень 16, Стан 1,
Звіт 1 рядків не вдалося підготувати.
Msg 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
)
Але подібна TV-версія з різними заявами працює чудово:
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 переосмислюється якCASE WHEN [Union1002]='a' THEN (1) ELSE CASE WHEN [Union1002]='b' THEN (2) ELSE NULL END END- з введенням, як ви бачите.