Exécuter une requête SQL SELECT plusieurs fois sur le même CTE





04-25-2017, 05:16 PM
Message : #1

File-cabinet_128x128 Exécuter une requête SQL SELECT plusieurs fois sur le même CTE


Comment exécuter plusieurs requêtes SELECT sur un même CTE? 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, 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

Il est impossible de lancer plusieurs fois la requête sur le même CTE. Utiliser une table temporaire.



Pour rappel, sous SQL Server, un CTE est un objet temporaire qui n'existe qu'après sa création et est supprimé après la première requête faite dessus.
Il faut donc utiliser une table temporaire pour conserver les résultats.

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

Note: Attention à bien vérifier si la table existe et la supprimer au préalable pour éviter les erreurs.
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse


Articles ou discussions similaires
Pivoter des lignes en colonnes avec la requête PIVOT sous SQL Server
Requête obtenir le numéro de version SQL Server exact
Requête SELECT simple sous SQL Server
Requête INSERT OR UPDATE sous SQL SERVER
Requête pour lister tous les index d’une base SQL Server