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 :

Erreur sur création de vue


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut Erreur sur création de vue
    Bonjour à tous!

    J'ai créé une vue avec la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select affreter.*, affreter.qte as stat
    from affreter, ordre, cat_prod
    where affreter.numot=ordre.numot
    and ordre.codcatp=cat_prod.codcatp
    and stat='Q'
     
    union
     
    select affreter.*, 1 as stat
    from affreter, ordre, cat_prod
    where affreter.numot=ordre.numot
    and ordre.codcatp=cat_prod.codcatp
    and stat='L'
    Mais quand je veux l'enregistrer, j'ai ce message d'erreur:
    La définition de la vue ne comprend pas de colonnes de sortie ni d'éléments dans la clause FROM
    J'avoue que je n'y comprend absolument rien. J'ai besoin d'orientation.

    Merci beaucoup!!!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    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 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    1) vous devez nommer explicitement vos colonne et ne pas utiliser *
    2) faites des JOIN, pas des jointures dans le WHERE.

    A +

  3. #3
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Ce qui est bizarre est que la majorité de mes vues, je les écris avec * et avec des jointures dans le where. Mais elles marchent très très parfaitement.

    Je crains que le problème soit ailleurs, parque j'ai remplacé * par par les noms de rubriques et il persiste toujours.

    Merci bien!!!

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    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 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Sauf si deux colonnes peuvent avoir le même nom, notamment du fait de l'intégrité référentielle. En effet, une vue n'étant au sens relationnel qu'un type particulier de table et une table devant avoir des noms de colonnes tous différents...

    De plus l'usage de SELECT * est fortement déconseillé en production. Sauf si vous voulez sciemment laissez quelques ennuis à vos successeurs !
    A lire :
    http://blog.developpez.com/sqlpro?ti...s_sur_ms_sql_s
    Commandement n°3 !

    A +

  5. #5
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 792
    Points : 3 061
    Points
    3 061
    Par défaut
    Bonjour

    A la lecture de ton SQL, je comprends que les deux instructions sont identiques à l'exception de la colonne "stat" qui doit être mise sur "1" lorsque stat="L" ou sur affreter.qte lors stat="Q".

    Si je n'ai pas loupé un détail, alors je te recommande de réécrire ton SQL en utilisant une condition de type CASE (http://msdn.microsoft.com/fr-fr/library/ms181765(SQL.90).aspx)

    En gros, un truc du genre (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT affreter.*, 
       CASE stat WHEN 'Q' THEN affreter.qte WHEN 'L' THEN '1' AS stat END
    FROM affreter, ordre, cat_prod
    WHERE affreter.numot=ordre.numot
    AND ordre.codcatp=cat_prod.codcatp

    Et n'oublie pas d'appliquer les recommandations de SQLPro à savoir utiliser des JOIN et éviter l'utilisation de l'*. Comme tu l'indiques, ce n'est pas une obligation mais c'est toutefois une excellente habitude et, tu verras, c'est mieux

  6. #6
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Il y a eu une petite dans la requête; par contre celle-ci a marché!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT affreter.*, 
       CASE stat WHEN 'Q' THEN affreter.qte WHEN 'L' THEN '1' END AS Stat
    FROM affreter, ordre, cat_prod
    WHERE affreter.numot=ordre.numot
    AND ordre.codcatp=cat_prod.codcatp
    Oui, je trouve les observations de SQLPro, très pertinantes et j'ai commencé déjà par les mettre en application.

    Merci beaucoup à SQLPro et cavo789.

  7. #7
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    J'aimerais bien comprendre pourquoi quand j'utilise des mots clés comme UNION, CASE et bien d'autres, il me dit que le SQL Designer ne les gère pas alors que la requête est exécutée et la vue marche parfaitement.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    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 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Aucune interface graphique au monde n'est capable de représenter correctement une requête SQL. C'est pourquoi ce genre de gadget est à éviter !

    A +

  9. #9
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Ok! Merci pour toutes les pertinentes remarques, j'en tiens déjà grand compte.

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

Discussions similaires

  1. Erreur sur création d'une vue
    Par CinePhil dans le forum Débuter
    Réponses: 2
    Dernier message: 18/10/2009, 00h06
  2. [VBA-E]erreur sur création d'une barre de menu
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2007, 11h17
  3. Erreur sur Création Dim Date Serveur sur Analysis Services
    Par domis dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/02/2007, 22h49
  4. Erreur sur Création de Pdf grâce à PdfCreator
    Par clauded07 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/01/2007, 15h43
  5. [UNIX][Optimisation] sur création de Vue
    Par dyvim dans le forum Oracle
    Réponses: 16
    Dernier message: 30/01/2006, 10h48

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