Exécuter plusieurs SELECT sur un CTE SQL Server

Comment exécuter plusieurs requêtes SELECT sur un même CTE ? Un CTE SQL Server permet de réutiliser le résultat d’une requête de sélection. C’est un jeu de données temporaire, uniquement durant le script.  Un CTE est largement utilisé notamment pour créer des requêtes récursives. 

 

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

 

Comment exécuter plusieurs fois une requête SELECT sur le même CTE sans erreur ?

 

Pour rappel, 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 une table temporaire car il est impossible de lancer plusieurs fois la requête sur le même 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 à bien vérifier si la table existe et la supprimer au préalable pour éviter les erreurs.

 

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

 

Comment exécuter plusieurs fois une requête SELECT sur le même CTE sans erreur ?

 

Pour rappel, 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 une table temporaire car il est impossible de lancer plusieurs fois la requête sur le même 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 à bien vérifier si la table existe et la supprimer au préalable pour éviter les erreurs.

 

Soyez le premier à commenter

Laisser un commentaire