IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Utilisation des CTE autre que SELECT ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 94
    Par défaut Utilisation des CTE autre que SELECT ?
    Bonjour,
    C'est encore moi avec mes CTE !

    les nombreux exemples que j'ai vu sur les CTE et la recursivité permettent d'AFFICHER un jeu de résultat, avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    WITH MaTable (...)
    AS
    	(
    		SELECT ...
    	UNION ALL
    		SELECT ...
    		INNER JOIN ...
    	)
    SELECT * FROM MaTable
    Mais est il possible - et si oui comment faire - de manipuler les données retournées : Pour les charger dans un curseur par exemple, ou bien faire un update, ou un insert dans une table ?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    est il possible - et si oui comment faire - de manipuler les données retournées : Pour les charger dans un curseur par exemple, ou bien faire un update, ou un insert dans une table ?
    Bien sûr, il suffit de regarder la BOL pour le voir (exemple i).

    En revanche je ne vois pas l'intérêt d'utiliser une CTE pour peupler un curseur : les CTE sont justement parfaitement adaptées à éviter tout traitement par curseur

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    WITH
    	CTE AS (colonnesDeLaCTE)
    	AS
    	(
    			SELECT ...
    		UNION ALL
    			SELECT ...
    			INNER JOIN ...
    	)
    UPDATE dbo.maTable
    SET uneColonne = CTE.uneColonneDeLaCTE
    FROM dbo.maTable AS T
    JOIN CTE AS C
    	ON T.uneClé = C.laClé
    WHERE ...
    @++

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 94
    Par défaut
    OK merci !

    Pour le curseur j'en ai besoin car j'ai un traitement complexe qui ne peut être fait en une seule requête. En gros je dois remonter dans un arbre a partir d'un nœud donné (donc ici, utilisation des CTE) et appliquer une procédure a chaque nœud ainsi ramené... je ne coupe donc pas a l'utilisation d'un satané curseur

    J'ai trouvé comment faire en passant par une table temporaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    WITH
    	CTE AS (colonnesDeLaCTE)
    	AS
    	(
    			SELECT ...
    		UNION ALL
    			SELECT ...
    			INNER JOIN ...
    	)
    SELECT colonnesDeLaCTE INTO #TMP FROM CTE
     
    DECLARE CURS_CTE CURSOR LOCAL FAST_FORWARD FOR
    			SELECT colonnes FROM #TMP
    ...

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    appliquer une procédure a chaque nœud ainsi ramené.
    C'est donc qu'il y a un problème dans votre modèle de données, ou que vous n'avez pas pensé aux fonctions.
    En ce qui concerne les curseurs, je vous propose un petit billet que j'ai écrit sur leurs performances, et j'ai fait de même avec les tables temporaires

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/09/2008, 14h10
  2. Réponses: 13
    Dernier message: 13/08/2008, 16h55
  3. [Visual Web] Utilisation des views plutôt que des tables
    Par eponette dans le forum NetBeans
    Réponses: 1
    Dernier message: 16/03/2007, 20h41
  4. MFC, son équivalent sur des plateformes autre que Windows
    Par uranium-design dans le forum Visual C++
    Réponses: 7
    Dernier message: 03/11/2006, 16h32
  5. Pourquoi faut-il utiliser des tables plutôt que des frames ?
    Par malicia_bm dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/10/2006, 09h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo