Quando uma tabela #temp não funciona

Às vezes, apenas uma vista é suficiente.

Você conhece o sentimento? Você adiciona apenas mais uma camada de aninhamento à sua visualização e, de repente, ela está morrendo, então você alcança a mesa temporária.
Mas isso significa que você precisará fazer disso um proc. Mas e se você realmente precisar REALMENTE que seja uma visualização, por exemplo, ele precisa ser usado por outra visualização.

Então, isso acontece porque o servidor SQL sempre se pergunta se ele pode otimizar melhor do que apenas buscar tudo em suas subconsultas. Muitas vezes está certo, porém, às vezes está errado e acaba chamando partes diferentes da mesma subconsulta milhares de vezes como se tivesse uma gagueira grave. Isso é o que realmente mata o desempenho. Você precisa forçá-lo a lembrar (ou “armazenar”) o conteúdo da subconsulta. Infelizmente, apesar de uma solicitação de recurso popular que remonta a anos, a Microsoft não introduziu isso como uma dica de consulta. No entanto, aqui está algo que geralmente, senão sempre, funciona como um hack:

** Coloque as cláusulas TOP e ORDER BY na subconsulta **

O ORDER BY força-o a buscar e lembrar (spool) de tudo. O TOP deve estar lá para permitir que você use o ORDER BY.
O número que você colocar depois de TOP precisa ser qualquer número enorme com mais linhas do que você jamais obterá. Em outras palavras, um número alto o suficiente para garantir que o TOP não faça nada.

SELECT TOP 2000000000 *
FROM
Stuff
ORDER BY
Something