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 :

Set @variable = sous-requete avec with


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Set @variable = sous-requete avec with
    Bonjour

    Je fais des sous-requetes du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set @cout_total = (select sum(toto) from liste);
    mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set @cout_total = (with liste as .... select sum(toto) from liste);
    il ne veut pas du with.
    Est-ce normal ou je fais une erreur?

    Merci

  2. #2
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonsoir,

    Ca dépend, le mot clef WITH sert à introduire une CTE (expression de table commune), disponible à partir de SQL Serveur 2005.

    Ici c'est clair que vous n'en avez pas besoin, mais au cas ou:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @c varchar(50)
    WITH cte(test)
    AS
    (
       SELECT 'Coucou'
    )
    SELECT TOP 1 @c = test FROM cte;
    PRINT @c
    @+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Mille merci!!!!!!!!!!!

    Oui dans votre exemple et dans le mien, c'est inutile mais en fait c'est une requete récursive, donc impossible à faire sans with.

    juste une question, comment peut-on trouver cela dans la doc Transac sql?

    Normalement si je lis bien on peut faire
    set @var=subquery
    et une sous-requete peut commencer par with or il me dit
    Syntaxe incorrecte vers le mot clé 'with'.
    Msg 319, Level 15, State 1, Line 3
    Syntaxe incorrecte près du mot clé «*with*». Si l'instruction est une expression de table commune ou une clause xmlnamespaces, l'instruction précédente doit se terminer par un point-virgule.

    Juste par curiosité au cas où vous auriez la réponse en tête.

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Normalement si je lis bien on peut faire
    vous pouvez effectivment écrire cela mais c'est un peu plus lourd que d'écrire SELECT @var = requête, si vous êtes certain que votre requête ne retourne qu'une seule valeur
    Dans le cas contraite la variable @var vaudra la valeur de la colonne de la première ligne, donc votre affectation sera fausse.

    et une sous-requete peut commencer par with
    Où avez-vous trouvé cela dans la documentation ?

    comment peut-on trouver cela dans la doc Transac sql?
    Le lien que vous a proposé agemis31 pointe sur la documentation de l'instruction WITH.
    Des exemples de CTE récursives se trouvent en bas de la page, ou encore ici et ici

    @++

  5. #5
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour,

    Pour le ";", comme il n'y avait qu'une instruction, je ne l'avais pas mis. Vous pouvez terminer l'instruction précédente par un point-virgule, ou mettre un point-virgule juste avant le WITH, ce qui revient au même

    @+

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

Discussions similaires

  1. Sous requete avec group by
    Par Budy123 dans le forum Développement
    Réponses: 3
    Dernier message: 27/08/2012, 21h52
  2. sous requete avec un limit non autorisé
    Par Phiss dans le forum Requêtes
    Réponses: 0
    Dernier message: 25/10/2011, 08h50
  3. sous-requete avec MIN()
    Par Didier44 dans le forum SQL
    Réponses: 1
    Dernier message: 06/10/2010, 12h24
  4. sous requete avec Not In
    Par tomy29 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/09/2007, 11h41
  5. [UPDATE]Sous-requetes avec plusieurs nuplets
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/07/2005, 18h28

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