Por que essa CASE
expressão:
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
Produzir este resultado?
Mensagem de erro: Msg 8180, Nível 16, Estado 1, Linha 1
Instrução(ões) não pôde(m) ser preparada(s).
Msg 125, Nível 15, Estado 4, Linha 1 As
expressões de caso só podem ser aninhadas no nível 10.
Claramente não há uma CASE
expressão aninhada aqui, embora haja mais de 10 "ramificações".
Outra esquisitice. Esta função com valor de tabela embutida produz o mesmo erro:
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
)
Mas um TVF de várias instruções semelhante funciona bem:
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