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 :

Incorrect syntax error near '.'. in SQL server [2008]


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Incorrect syntax error near '.'. in SQL server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT   
    CASE 	WHEN TableWDM.ADRESSE_EMAIL IS NOT NULL 
    THEN        TableWDM.ADRESSE_EMAIL 
    WHEN       TableWDM.ADRESSE_EMAIL IS NULL 
    THEN        dig.EMAIL END AS EMAIL, 
    ...
    TableWDM.Expr3,TableWDM.EMAIL_NUMERO_CLIENT_VAD,TableWDM.EMAIL_NUMERO_CLIENT_PRL,    TableWDM.ADRESSE_EMAIL,

    Je rencontre un message d'erreur " Incorrect syntax error near'.'. " dans sql server. Je ne trouve pas à quoi est dû cette erreur. Quelqu’un pourrait il m'aider svp?

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    A priori, il manque le END du CASE.
    Kropernic

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Une fois la balise code ajoutée, on retrouve bien le END.

    On se rend compte aussi que le case pourrait simplement être écrit comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COALESCE(TableWDM.ADRESSE_EMAIL, dig.EMAIL)AS EMAIL
    Mais... ce n'est pas ce qui provoque l'erreur.

    Pour le savoir, il faudrait la requête en entier !

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Une fois la balise code ajoutée, on retrouve bien le END.
    Je ne suis peut-être pas encore bien réveillé mais je ne vois vraiment pas le END en question. Surtout qu'il y a une virgule qui montre clairement pour moi qu'il passe à la colonne suivante de la clause SELECT.
    Citation Envoyé par aieeeuuuuu Voir le message
    On se rend compte aussi que le case pourrait simplement être écrit comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COALESCE(TableWDM.ADRESSE_EMAIL, dig.EMAIL)AS EMAIL
    Mais... ce n'est pas ce qui provoque l'erreur.

    Pour le savoir, il faudrait la requête en entier !
    Là je suis bien d'accord ^^.
    Kropernic

  5. #5
    Candidat au Club
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut re : Erreor message sql
    Merci pour vos réponses.
    Le END est bien présent dans la partie que j'ai posté mais avant la ligne concernée par le problème.
    Je n'ai pas posté ma requête entièrecar celle ci fait encore pas mal de ligne et elle est vraiment longue mais je peux rajouter d'autres éléments comme ceux ci :

    SELECT
    CASE
    WHEN TableWDM.ADRESSE_EMAIL IS NOT NULL
    THEN TableWDM.ADRESSE_EMAIL
    WHEN TableWDM.ADRESSE_EMAIL IS NULL
    THEN dig.EMAIL END AS EMAIL,

    TableWDM.ID_INDIVIDU, TableWDM.ID_FOYER,
    ...
    TableWDM.Expr3,TableWDM.EMAIL_NUMERO_CLIENT_VAD,TableWDM.EMAIL_NUMERO_CLIENT_PRL, TableWDM.ADRESSE_EMAIL,
    ...
    TableWDM.Expr4, TableWDM.DATE_CREATION, TableWDM.OPTIN_MARQUE_OBS, TableWDM.OPTIN_PARTENAIRE_CHL, TableWDM.OPTIN_PARTENAIRE_SCA, TableWDM.OPTIN_PARTENAIRE_VAD, TableWDM.Expr5, dig.DATEJOIN, dig.FIRSTNAME, dig.LASTNAME, dig.TITLE,
    ...
    FROM
    dbo.TableWDM AS TableWDM
    FULL OUTER JOIN
    dbo.SearchResults_DIGITAL_Golden AS dig
    ON TableWDM.ADRESSE_EMAIL = dig.EMAIL

    Go

    Ainsi vous avez je pense tout ce qui doit servir à trouver cette erreur.
    La ligne concernée normalement est celle commençant par " TableWDM.Expr3..."

    Merci pour vos réponses

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Maintenant je vois le END. Je n'étais donc pas bien réveillé .

    En général, dans ses messages d'erreur, sql server donne un numéro de ligne aussi. Si j'ai bien compris, il s'agit de la ligne en gras. Pourrait-on également avoir la ligne juste avant svp ?
    Kropernic

  7. #7
    Candidat au Club
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut re : Erreor message sql
    Oui il s'agit bien de la ligne en gras.

    Voici la ligne juste avant et la ligne juste après :

    TableWDM.TYPOLOGIE_PRINT_TELEPHONE, TableWDM.PARRAIN, TableWDM.FILLEUL, TableWDM.EMAIL_DU_PARRAIN, TableWDM.EMAIL_DU_FILLEUL_1, TableWDM.EMAIL_DU_FILLEUL_2, TableWDM.POINT_DE_FIDELITE, TableWDM.SUSPECT, TableWDM.TYPOLOGIE_CLIENT_WEB,
    TableWDM.Expr3,TableWDM.EMAIL_NUMERO_CLIENT_VAD,TableWDM.EMAIL_NUMERO_CLIENT_PRL, TableWDM.ADRESSE_EMAIL,
    TableWDM.Expr4, TableWDM.DATE_CREATION, TableWDM.OPTIN_MARQUE_OBS, TableWDM.OPTIN_MARQUE_CHL, TableWDM.OPTIN_MARQUE_SCA, TableWDM.OPTIN_MARQUE_VAD, TableWDM.OPTIN_PARTENAIRE_OBS, TableWDM.OPTIN_PARTENAIRE_CHL, TableWDM.OPTIN_PARTENAIRE_SCA, TableWDM.OPTIN_PARTENAIRE_VAD, TableWDM.Expr5, dig.DATEJOIN, dig.FIRSTNAME, dig.LASTNAME, dig.TITLE, dig.DATEOFBIRTH, dig.ALERTE_BAC, dig.ALERTE_LEGISL, dig.COMMUNE AS Expr6,

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Bin là comme ça, je ne vois pas... (en même temps, je ne voyais déjà pas le END du CASE )

    Mis à part le fait qu'il y a de manière presque certaine un problème au niveau de la modélisation (car quand on voit des noms colonnes comme Expr3 et Expr4 ou encore EMAIL_DU_FILLEUL_1, EMAIL_DU_FILLEUL_2, c'est quand même plus que douteux), je ne vois pas où se trouve l'erreur de syntaxe.

    Je vous suggère de commencer par simplifier votre requête et de la reconstruire progressivement à partir du version fonctionnelle.

    EDIT : Par curiosité, tu bosses chez/pour WDM France ? ^^
    Kropernic

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par lalves Voir le message
    Voici la ligne juste avant et la ligne juste après :
    Ce n'est pas suffisant.
    Il se peut que l'erreur se situe en fait 5 lignes plus haut, ce qui embrouille le parser, mais ne le fait bloquer réellement que sur la ligne qu'il vous indique. Surtout sur ce type d'erreur.
    Vous pouvez poster la requête en entière, en la mettant dans des balises code (bouton dièse de la zone de saisie)

    Commencez par indenter votre requête : une colonne par ligne maximum, avec la virgule au début. (je mise sur une virgule manquante...)

  10. #10
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Ce n'est pas suffisant.
    Il se peut que l'erreur se situe en fait 5 lignes plus haut, ce qui embrouille le parser, mais ne le fait bloquer réellement que sur la ligne qu'il vous indique. Surtout sur ce type d'erreur.
    Vous pouvez poster la requête en entière, en la mettant dans des balises code (bouton dièse de la zone de saisie)

    Commencez par indenter votre requête : une colonne par ligne maximum, avec la virgule au début. (je mise sur une virgule manquante...)
    C'est ce que je cherchais, la virgule manquante. Mais dans ces cas-là, c'est toujours la ligne d'avant (je mets les virgule en fin de ligne moi^^) qui fautive et non pas celle indiquée par sql server (en mettant une colonne par ligne). Mais ici vu qu'il y en a une chiée par ligne, on devrait "vite" tomber dessus. Donc bon...

    My 2 cents.
    Kropernic

  11. #11
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    (je mets les virgule en fin de ligne moi^^)
    Ca doit être un truc de fainéant, mais quand tu mets la virgule en début de ligne tu peux commenter ton code plus rapidement.
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  12. #12
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par darkelend Voir le message
    Ca doit être un truc de fainéant, mais quand tu mets la virgule en début de ligne tu peux commenter ton code plus rapidement.
    C'est vrai que c'est plus facile mais j'aime pas car alors le nom de la première colonne n'est pas aligné avec les autres vu qu'il n'a pas sa virgule. Et ajouter un espace devant, c'est triché :p
    Kropernic

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je dis ça comme ça, mais faire du débuggage de requête en n'en voyant qu'une partie, c'est résoudre un problème avec la moitié des indices...

  14. #14
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Je dis ça comme ça, mais faire du débuggage de requête en n'en voyant qu'une partie, c'est résoudre un problème avec la moitié des indices...
    Je pense parler au nom de tous en disant qu'on est bien d'accord avec toi. Cependant, on fait avec ce qu'on a et on bavarde d'indentation entre temps ^^.
    Kropernic

  15. #15
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    C'est vrai que c'est plus facile mais j'aime pas car alors le nom de la première colonne n'est pas aligné avec les autres vu qu'il n'a pas sa virgule. Et ajouter un espace devant, c'est triché :p

    L'avantage surtout, c'est que les virgules, elles, sont bien alignées. Du coup on voit vite s'il en manque une. En plus elle sont bien visibles à l’écran, même si une ligne est longue...

    Enfin après ce n'est qu'une question de gout... ou de règle de codage

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Je pense parler au nom de tous en disant qu'on est bien d'accord avec toi. Cependant, on fait avec ce qu'on a et on bavarde d'indentation entre temps ^^.
    Si personne ne lui explique comment travailler proprement, ça n'avancera pas et tu perds ton temps.

  17. #17
    Candidat au Club
    Femme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut re : Erreor message sql
    Je vous remercie tous.
    Avec le peu d'info que je vous ai fournis vous m'avez effectivement aider à résoudre mon problème.
    En fait il s'agit d'une requête très longue c'est pour cela que je ne l'ai pas posté en entière.
    Il y avait plusieurs cause : une virgule manquante dans ces centaines de lignes j'ai dû passer à travers et une histoire de table initiale, le chargement avait buggé.
    Merci a vous

    PS : Non je ne travail pas chez WDM France

  18. #18
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Quand je tombe sur ce genre de requête énorme, j'utilise un indenteur de code pour y voir plus clair. J'en ai fait un tout simple, il n'est pas parfait mais il dégrossit bien le travail. http://wiki.kankuru.fr/wiki/52/sql-indent
    Comme dis précédemment, avec les virgules bien alignées c'est souvent plus facile à lire.
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  19. #19
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par lalves Voir le message
    une virgule manquante dans ces centaines de lignes
    Comme disait Lamartine, "Une seule virgule vous manque, et tout est à debugguer" (ou quelque chose comme ça, je ne sais plus très bien)

    La virgule manquante est un piège, car alors le parser peut prendre la colonne suivante pour un alias... et planter plusieurs lignes plus bas, ou même ne pas planter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 
        nom
        prenom
        dateNaissance
    FROM Personne
    ==> le parser indiquera une erreur sur DateNaissance, alors que l'erreur véritable est avant !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 
        nom
        prenom
        ,dateNaissance
    FROM Personne
    ==> la parser ne plantera pas, et la requête ressortira uniquement le nom (dans une colonne intitulée "prenom") et la date de naissance...

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

Discussions similaires

  1. erreur : syntax error near unexpected token
    Par lapinou8430 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 28/04/2009, 00h30
  2. Syntaxe champs calculé avec sql server
    Par phibu dans le forum Développement
    Réponses: 4
    Dernier message: 29/01/2009, 08h01
  3. Error 9002 avec SQL Server 2000
    Par Contact2012 dans le forum Outils
    Réponses: 4
    Dernier message: 10/07/2008, 16h16
  4. [sh] syntax error near unexpected token `}'
    Par vercin dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/09/2007, 11h33
  5. [dump SQL] syntax error near 'ENGINE=MyISAM
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 27/09/2006, 12h33

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