Olá Gustavo,
Fora a mensagem de erro, há uma problema na sua consulta que o dificultará a conseguir a ajuda necessária e possivelmente a fazer a manutenção na mesma. Sempre que houver consultas muito complexas, você deve segmentá-la em consultas menores para que possamos focar especificamente no problema e não tentar desvendar as diversas linhas de código. Imagine a consulta abaixo:
Code Snippet
SELECT
CAST(SUBSTRING(Data,20,6) + '01' AS SMALLDATETIME), Nome + ISNULL(SobreNome,'') + UltimoNome as NomeCompleto,
REPLACE(REPLACE(REPLACE(LEFT(SUBSTRING(Codigo,15,3),5),'á','a'),'.',','),'R$','U$') * 100,
CASE DAY(Data) WHEN 1 THEN 'Dia Primeiro de ' ELSE NULL END AS DiaPrimeiroFlag
FROM
tbl1
,tbl2,tbl3,tbl4
WHERE
tbl1
.id = tbl2.id and tbl2.codigo not in (select max(codigo) from tb5) and
tbl3
.id *= tbl4.id and LEFT(tbl3.codigo,2) = REPLACE(tbl5,'000000000','0') + '__' and
tbl2
.dtvencto in (select min(data) from tblDatas WHERE Ref = '200809')
Se pudéssemos nos concentar no problema ao invés de visualizar toda essa poluição visual, com certeza o suporte seria muito mais eficiente. O recurso CTE permite essa divisão (não é preciso nem utilizar Views ou UDFs) e recomendo que a utilize (acredite, ficará bem mais fácil). Ex:
Code Snippet
WITH
CTE1
AS (SELECT <Alguma Coisa> FROM <Algum Objeto>),
CTE2
AS (SELECT <Alguma Coisa> FROM CTE1),
CTE3
AS (SELECT <Alguma Coisa> FROM CTE2)
SELECT
<Campos> FROM CTE3
Se você puder reescrever a sua consulta de forma a deixar o código mais legível e nos posicionar apenas para a questão da recursividade, posso tentar ajudá-lo. Já adianto que o MAX RECURSION não é a solução.
[ ]s,
Gustavo