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

MS SQL Server Discussion :

Requete recursive avec WITH


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut Requete recursive avec WITH
    Bonjour,

    Je voudrais faire une requete recursive sur SQL Server 2005. J'ai donc parcouru le net a la recherche d'exemple et tous les exemples que je trouve (qui semble marcher pour les autres) ne marche pas chez moi.

    A chaque fois j'obtiens l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Incorrect syntax near the keyword 'WITH'.
    voici un exemple de code qui est cense marcher:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE TABLE Nomencl
    (Précédent char(8) NOT NULL,
     Code char(8) NOT NULL,
    PRIMARY KEY (Code)
    ) ;
     
    INSERT INTO Nomencl VALUES ('30', '33') ;
    INSERT INTO Nomencl VALUES ('36', '30') ;
    INSERT INTO Nomencl VALUES ('0', '36') ;
     
    ----------- Requête récursive ------------------
     
    WITH Recurs (Précédent, Code) AS
     -- Amoçage de la pompe
    (SELECT Précédent, Code
      FROM   Nomencl WHERE Précédent = '0'    -- point de départ
      Union ALL
      -- Récursion
     (SELECT n.Précédent, n.Code
      FROM   Nomencl AS n, Recurs AS r   
      WHERE  n.Précédent = r.Code)
     ) 
    -- Affichage du résultat 
    SELECT Code, Précédent
    FROM   Recurs
    ;
    si quelqu'un connait le pourquoi du probleme, mes oreilles sont grandes ouvertes

  2. #2
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    C'est vrai que ça marche pour moi !

    Tu as essayé juste en retirant les accents ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Peut être votre base est en rétro compatibilité 2000. Essayer en créant une nouvelle base.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Je ne peux pas recreer de base nous sommes plusieurs a travailler dessus. Cependant je peux l'administrer si je veux. J'avais trouve quelques forums parlant justement du probleme de compabilite entre les versions.

    Ma base a un compability level 80. est ce bon ?

  5. #5
    Membre actif Avatar de gderenne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2007
    Messages : 250
    Points : 281
    Points
    281
    Par défaut
    Si je ne dis pas de bétises, SQL Server 2005 est 90.
    Cordialement,
    Gil DERENNE
    DBA Oracle - MySQL - SQL Server - PostegreSQL
    Dev WebServices C#.NET

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    80 => SQL Server 2000. C'est donc bien la raison de l'impossibilité de créer des requêtes récursives.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    La bonne nouvelle c'est que vous avez trouve ou etait le probleme. La mauvaise c'est que je pensais etre sous SQLServer 2005 et en fait je suis sous 2000. Donc toutes les belles synthaxes de requete recursive que j'ai vu je peux les mettre a la poubelle.

    Je vais etre oblige de faire la recursivite moi meme... sauf si vous connaissez un autre moyen ?

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    J'avais deja vu cette page mais je ne veux pas me trimballer des numeros dans ma base. Etant donne le nombre d'enregistrement important ca risque eventuellement de poser probleme

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    qu'appelez-vous "nombre d'enregistrement important" ?

    J'ai mis en oeuvre la solution que je préconise avec des tables contenant quelques millions de lignes et cela ne pose aucun problème...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Desole pour le temps de reponse mais j'ai ete bcp occupe.

    Tout d'abord merci a tous pour les reponses. Il faut savoir que suite a la remarque qui m'a ete fait sur l'implementation de ce systeme sur des milliers d'enregistrement j'en ai parle avec mon chef de projet.

    Cependant on n'a pas retenu la solution pour diverses raisons que voici:

    Il faut savoir que c'etait pour faire un gestionnaire de fichier qui se basait sur des repertoires virtuelles contenues dans une base de donnees.

    Du coup la plus grande des parties des requetes etait des requetes de Select sur un seul niveau (et non sur l'arborescence entiere).

    De plus la recurisivite est simplement utilise dans le cas de la suppression et de la copie. Pour la fonction couper il suffit juste de changer l'id du parent pere. Du coup la methode decrite facilitait surement certaine actions (copier et supprimer) mais en compliquait d'autre.

    Voila en gros les raisons de pourquoi on ne l'a pas utilise. Cependant cette solution reste toute de meme tres interessante.

    Merci encore a tous

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

Discussions similaires

  1. problème avec requete recursive
    Par richard038 dans le forum SQL
    Réponses: 1
    Dernier message: 04/04/2011, 12h42
  2. 2 problèmes avec with recursive et case
    Par fabienazerty dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/11/2009, 09h50
  3. Set @variable = sous-requete avec with
    Par famjerom dans le forum Développement
    Réponses: 4
    Dernier message: 07/06/2009, 10h10
  4. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  5. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04

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