Déclaration de variable dans l'expression WITH (SQL Server)?

existe-t-il un moyen de définir une variable dans une expression WITH? Quelque chose comme:

;WITH SomeName AS ( declare @somevar decimal set @somevar = ... SELECT ....) 

Possible?

Non, vous devez le déclarer / le définir en dehors du CTE

 DECLARE @somevar DECIMAL ;WITH SomeName AS (SELECT....) SELECT @somevar = ... FROM SomeName 

Par MSDN :

CTE_query_definition
Spécifie une instruction SELECT dont l'set de résultats remplit l'expression de la table commune. L'instruction SELECT pour CTE_query_definition doit répondre aux mêmes exigences que pour la création d'une vue, sauf qu'un CTE ne peut pas en définir un autre.

Je sais que c'est maintenant une vieille question, mais il est possible d'approcher un comportement «variable» en utilisant une application CTE et judicieuse d'un CROSS JOIN pour exploiter la puissance du traitement basé sur un set.

 WITH CTE_Name (somevar1, somevar2) AS (SELECT 0.15, 0.65) SELECT sq.Col1 * cte.somevar1 AS Calc1, sq.Col2 * cte.somevar2 AS Calc2 FROM ( SELECT 10 Col1, 20 Col2 UNION SELECT 30, 40 ) AS sq CROSS JOIN CTE_Name AS cte 

Notez que l'utilisation d'un CROSS JOIN returnne le produit cartésien des tables impliquées dans la jointure, donc pour éviter les lignes excessives / dupliquées dans la sortie finale, le CTE doit returnner un et un seul logging.