Possible de renvoyer des loggings et de countr à partir d'un CTE?

Dites que j'ai un proc stocké qui a un paramètre de return appelé Count et il est composé du SQL suivant:

 with temp as ( SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum, o.orderId FROM Orders as o ) SELECT * FROM temp where rowNum BETWEEEN 10 and 20 SELECT @Count = COUNT(*) FROM Temp 

Actuellement, cela va casser parce que Temp est parti après la première sélection. Est-il possible pour moi de définir la valeur du paramètre return sur le nombre total de lignes dans mon CTE et de returnner les lignes de 10-20?

Je pense que je pourrais avoir à le faire en utilisant une table temporaire, mais je suis curieux de savoir si cela peut être fait en utilisant un CTE.

Malheureusement, vous ne pouvez pas faire ce que vous essayez de faire. La réponse de Gordon est acceptable, sauf qu'elle ne renvoie pas de valeur à votre variable.

Vous rencontrez un problème fondamental. Les CTE n'autorisent qu'une seule requête après celle-ci.

Une table temporaire ou une variable de table serait la seule solution. A less que vous ne returnniez à la table en dehors du CTE pour returnner la variable, comme ceci:

 with temp as ( SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum, o.orderId FROM Orders as o ) SELECT * FROM temp where rowNum BETWEEEN 10 and 20 SELECT @Count = COUNT(*) FROM Orders 

Vous pouvez mettre la valeur directement dans temp:

 with temp as ( SELECT ROW_NUMBER() OVER( ORDER BY o.createDate) as rowNum, count(*) over () as cnt, o.orderId FROM Orders as o ) SELECT * FROM temp where rowNum BETWEEEN 10 and 20 

Vous pouvez ensuite lire le cnt avec chaque ligne.