Appeler un CTE SQL Server plusieurs fois

Comment exécuter plusieurs requêtes SELECT sur un même CTE SQL Server ?

Est-il possible d’exécuter plusieurs requêtes sur un CTE, soit appeler un CTE SQL Server plusieurs fois dans la même procédure stockée par exemple ? Tout d’abord, un CTE (Common Table Expression) permet de réutiliser le résultat d’une requête de sélection. C’est un jeu de données temporaire, disponible uniquement durant le script. Le CTE est largement utilisé notamment pour créer des requêtes récursives. Il est vrai que lors de la deuxième requête SELECT sur un CTE cette erreur est retournée par SQL Server:

(1 row(s) affected)
Msg 208, Level 16, State 1, Line 9
Invalid object name ‘MonCTE’.

En effet, il semble impossible de réutiliser un CTE plusieurs fois. Sinon, l’erreur s’affiche, Nom d’objet non valide avec un CTE SQL Server.

Peut-on appeler un CTE SQL Server plusieurs fois ?

En effet, la première requête SELECT sur le CTE fonctionne mais pas les suivantes. Voici un exemple de CTE avec les requêtes SELECT :

WITH MonCTE (Hier, Aujourdhui, Demain) AS
(
  SELECT		getdate()-1 as Hier,
  getdate() 	as Aujourdhui,
  getdate()+1 as Demain
)

SELECT Hier		FROM MonCTE;

SELECT Aujourdhui	FROM MonCTE;

SELECT Demain		FROM MonCTE;

Sous SQL Server, un CTE pour Common Table Expression est un objet temporaire qui n’existe qu’après sa création. Il est ensuite supprimé après la première requête exécutée dessus. Il faut donc utiliser une table temporaire pour conserver les résultats.

Utiliser plutôt une table temporaire à la place du CTE

Cette requête qui remplace le CTE par une table temporaire fonctionne parfaitement.

IF OBJECT_ID('tempdb..#Temp_Table') IS NOT NULL
	DROP TABLE #Temp_Table;

SELECT 	
	getdate()-1 as Hier,
	getdate()   as Aujourdhui,
	getdate()+1 as Demain

INTO		#Temp_Table;

SELECT Hier 
FROM #Temp_Table;

SELECT Aujourdhui 
FROM #Temp_Table;

SELECT Demain 
FROM #Temp_Table;

Par ailleurs, faire attention à vérifier si la table existe et la supprimer au préalable pour éviter les erreurs. Enfin, voici un tutoriel sur un autre sujet SQL Server, pour apprendre comment faire pivoter des lignes en colonnes depuis une table SQL Server. Il faut utiliser la requête SQL Server PIVOT.

Pour conclure, ce tutoriel explique une méthode pour appeler un CTE SQL Server plusieurs fois et contourner le problème.

Tutoriels sur les requêtes utiles SQL Server

Voici une sélection de quelques tutoriels MS SQL avec des requêtes simples mais utiles.

Be the first to comment

Leave a Reply

Your email address will not be published.


*