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 :

PB avec la clause WITH


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut PB avec la clause WITH
    Bonjour a tous

    j'ai un probleme avec la clause with que je n'arrive pas a utiliser.

    j'ai une sous requete que j'appelle a 3 reprises dans ma requete principale.
    la requete marche bien.

    pour l'optimiser je voudrais donc utiliser le with, et d'apres mes recherches la syntaxe de ma requete me semble bonne :

    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
    WITH TabTemp(numprd, numnat, dateclot, numctrt)
    AS 
    (
    	SELECT P.IDPRDT, P.IDNTCT, C.DATCLO, C.IDCTRT
    	FROM AVPDTS AS P
    	INNER JOIN AVCTRT AS C ON P.IDPRDT = C.IDPRDT
    	WHERE C.REFCTR = '86900078'
    	AND DATCLO IS NULL
    )
     
    SELECT *
    FROM TabTemp
    WHERE numnat = CASE (select count (*) from TabTemp)
    		 WHEN 1 THEN numnat
    		 WHEN 2 THEN (SELECT numnat FROM TabTemp WHERE numnat <> 3)
    		 ELSE 0
    	       END
    Mais j'ai le message d'erreur suivant :
    "Syntaxe incorrecte vers le mot clé 'WITH'."

    Je ne comprends vraiment pas car il me semble que je respecte la syntaxe vue dans des exemples.

    Si quelqu'un a une petite idée ca serait super cool

    merci par avance a ceux qui se pencheront sur ce probleme.

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Exécutes-tu ta requête dans un batch, et si oui, est-ce que l'instruction précédente est bien terminée par un point-virgule ?

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par rudib
    Exécutes-tu ta requête dans un batch, et si oui, est-ce que l'instruction précédente est bien terminée par un point-virgule ?
    Non c'est une requete unique qui n'est pas dans un batch que je teste simplement pour le moment dans l'analyseur de requete de mssql server.

    La clause with est elle implémentée sur Ms Sql Server 2000? ( je n'ai pas trouvé la réponse)

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Ah, évidemment... Non, le WITH n'est implémenté qu'à partir de SQL Server 2005

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Arffff

    Y aurait-il quelque chose de semblable pour MSSQL 2000?
    Ou un moyen de ne pas copier la sous requete plusieurs fois et ainsi ne pas la réexecuter a chaque fois? ... sans passer par une table temporaire

    merci rudib pour ta reponse rapide

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Points : 21
    Points
    21
    Par défaut
    Utilise une table temporaire #TabTemp...

    _

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par faflenrage
    ... sans passer par une table temporaire
    fallait peut etre que je l'ecrive en majuscule..?!?!

    l'utilisation de table temporaire est tro lourde dans l'environement ou je veu appliquer la requete?

    Une autre solution?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par faflenrage
    l'utilisation de table temporaire est tro lourde dans l'environement ou je veu appliquer la requete?
    Ca veut dire quoi ?

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    bin en fait je l'utilise afin d'intégrer des fichiers ayant un nombre de ligne important et cette requete est executee pour chaque ligne.

    La création d'une table temporaire ne fera qu'augmenter le temps d'intégration et monopoliser les ressources du serveur.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par faflenrage
    bin en fait je l'utilise afin d'intégrer des fichiers ayant un nombre de ligne important et cette requete est executee pour chaque ligne.
    Interessant... Tu utilises quel outil pour intégrer tes fichiers ligne à ligne ?

    Citation Envoyé par faflenrage
    La création d'une table temporaire ne fera qu'augmenter le temps d'intégration et monopoliser les ressources du serveur.
    C'est une vue de l'esprit que de dire cela...

  11. #11
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Malheureusement plus ou moins d'accord avec Zers. Malheureusement parce que je n'aime pas les tables temporaires.

    Dans ton cas, la table temporaire (ou mieux, la variable de type table) peut être moins gourmande que de lancer tris fois la requête. J'ai essayé le WITH sur SQL Server 2005, avec des tables vides, c'était assez gourmand déjà.

    Peut-être peux-tu songer à faire une table temporaire "fixe" qui contienne le résultat de ton import, et ensuite faire l'insert d'un bloc avec le contenu de cette table...

  12. #12
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par ZERS
    Interessant... Tu utilises quel outil pour intégrer tes fichiers ligne à ligne ?
    bin tout simplement celui que je suis en train de developper, en vb.net

    sinon bin sur tes conseils et ceux de rudib je vais tester avec un table temporaire et voir si les performances restent raisonnables, et je vous tiens au courant.

    Merci a vous deux en tous les cas

  13. #13
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Good,

    Au cas où, tu as déjà des outils intégrés pour importer des fichiers textes :
    - bcp
    - bulk insert
    - openrowset
    - DTS

    Le DTS pourrait te permettre de faire des choses compliquées, le BULK INSERT pourrait te permettre d'insérer les données telles quelles dans tes tables tampons pour être traitées ensuite par SQL en set de données.

Discussions similaires

  1. Requête avec clause with
    Par maamer dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 20/11/2012, 17h10
  2. Requête avec multiple clause where
    Par pgenet dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/03/2006, 14h59
  3. [PL/SQL] curseur et clause WITH
    Par ljoly dans le forum Oracle
    Réponses: 6
    Dernier message: 24/01/2006, 15h26
  4. Pb avec la clause ORDER BY...
    Par Karibou dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/08/2005, 15h48
  5. [super requete] Dumper un model avec une clause where
    Par elievar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2005, 18h05

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