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.
Soyez le premier à commenter