SQL Server 2008 Dynamique de la Requête à l'aide de la CTE

Je suis en train d'écrire une Requête Dynamique qui utilise une expression de table commune. Mais je suis confronté à des problèmes - voir ci-dessous
C'est un cas simplifié

declare @DynSql varchar(max)='';
declare @cnt as integer;
with months as (
select CAST('07/01/2010' as DATE) stdt
UNION ALL
SELECT DATEADD(MONTH,1,STDT) FROM months
WHERE DATEADD(MONTH,1,STDT)<CAST('06/30/2011' AS DATE)
)
select COUNT(*) from months
set @DynSql='select * from months'
exec (@DynSql)

Cela ne fonctionne pas - l'erreur que j'obtiens est
Nom d'Objet non valide 'Mois'

Est-il possible de réaliser ce que je veux. Il travaillera si j'utilise de la table temporaire ou une variable de table.

Vous ne pouvez pas référence à la cce de l'intérieur de la cte.
pourquoi avez-vous besoin select COUNT(*) from months? et pourquoi avez-vous besoin d'une dynamic requête?
Si je n'ai pas mis select count(*) il se plaint de "CTE pas utilisé". Je suis en train de créer un pivot de la requête avec mois à l'échelle de l'axe Y.Le nombre de mois est variable. donc je vais devoir créer pivot quelque chose comme pivot(somme(fld) pour le col(['jan-10'],['fév-10']...)
Je pense que vous pouvez peut-être surplombant le plus grand message envoyé par SQL Server: à ne pas faire des tableaux croisés dynamiques en T-SQL. La langue n'était tout simplement pas faite pour cela et vous devez sauter à travers beaucoup de problèmes pour le faire fonctionner. Utiliser un outil de reporting ou de le faire dans un composant de couche intermédiaire.

OriginalL'auteur josephj1989 | 2010-06-18