none
probléme avec une requéte t-SQL sur SQL Server 2008 RRS feed

  • Question

  • Bonjour,

    j'ai un message d'erreur sur l'une de mes requêtes t-sql dans mon code PHP, et j'arrive pas à trouver l’erreur alors si quelqu'un peut m'aider

    SELECT dbo.GROUP_CONCAT("<span style=color:", IF([dbo].events_categories.color IS NOT NULL, [dbo].events_categories.color, "#000000"), ";>" + [dbo].events.name, "</span>") ORDER BY [dbo].calendar.event_time ASC SEPARATOR "$$" as cnt, [dbo].calendar.event_date, dbo.GROUP_CONCAT([dbo].events.id + "===" + [dbo].events.description) ORDER BY [dbo].calendar.event_time ASC SEPARATOR "$$") as id_description, SUBSTRING([dbo].calendar.event_date, 9, 2) as day FROM [dbo].calendar INNER JOIN [dbo].events ON [dbo].calendar.event_id = [dbo].events.id LEFT OUTER JOIN [dbo].events_categories ON [dbo].events.category_id = [dbo].events_categories.id WHERE SUBSTRING([dbo].calendar.event_date, 1, 4) = '2015' AND SUBSTRING([dbo].calendar.event_date, 6, 2) = '07' AND SUBSTRING([dbo].calendar.event_time, 4, 2) = '00' AND SUBSTRING([dbo].calendar.event_time, 1, 2) < '22' GROUP BY SUBSTRING([dbo].calendar.event_date, 9, 2) 

    [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near the keyword 'IF'.

    la fonction GROUP_CONCAT je l'ai installé et testé elle marche.

    MERCI

    jeudi 23 juillet 2015 10:24

Toutes les réponses

  • Ilyas,

    SELECT dbo.GROUP_CONCAT("<span style=color:", IF([dbo].events_categories.color IS NOT NULL, [dbo].events_categories.color, "#000000"), ";>" + [dbo].events.name, "</span>") ORDER BY [dbo].calendar.event_time ASC

    Vous ne pouvez pas utiliser le mot clé "IF" dans ce contexte. Remplacez votre requête par:

    SELECT dbo.GROUP_CONCAT("<span style=color:", CASE WHEN[dbo].events_categories.color IS NOT NULL THEN  [dbo].events_categories.color ELSE "#000000" END, ";>" + [dbo].events.name, "</span>") ORDER BY [dbo].calendar.event_time ASC


    Please click "Mark As Answer" if my post helped.

    jeudi 23 juillet 2015 13:12
  • Bonjour Merci pour votre solution mais lors du test j'ai eu d'autres messages d'erreurs !!

    Msg 207, Niveau 16, État 1, Ligne 1
    Invalid column name '<span style=color:'.
    Msg 4104, Niveau 16, État 1, Ligne 1
    The multi-part identifier "dbo.events_categories.color" could not be bound.
    Msg 4104, Niveau 16, État 1, Ligne 1
    The multi-part identifier "dbo.events_categories.color" could not be bound.
    Msg 207, Niveau 16, État 1, Ligne 1
    Invalid column name '#000000'.
    Msg 207, Niveau 16, État 1, Ligne 1
    Invalid column name ';>'.
    Msg 4104, Niveau 16, État 1, Ligne 1
    The multi-part identifier "dbo.events.name" could not be bound.
    Msg 207, Niveau 16, État 1, Ligne 1
    Invalid column name '</span>'.
    Msg 4104, Niveau 16, État 1, Ligne 1
    The multi-part identifier "dbo.calendar.event_time" could not be bound.

     


    • Modifié ilyas.az vendredi 24 juillet 2015 07:36
    vendredi 24 juillet 2015 07:25
  • En T-SQL c'est le quote (') qui est le délimiteur de chaîne, le double-quote (") est un délimiteur de nom d'identificateur.

    Maintenant pourquoi faire du formatage de donnée dans une requête ? Ce n'est pas le travail d'un serveur de donnée, mais c'est au client de le faire.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    vendredi 24 juillet 2015 07:34
  • oui j'ai corrigé cette erreur mais j'ai toujours des erreurs 

    Msg 4104, Niveau 16, État 1, Ligne 2
    The multi-part identifier "dbo.events_categories.color" could not be bound.
    Msg 4104, Niveau 16, État 1, Ligne 3
    The multi-part identifier "dbo.events_categories.color" could not be bound.
    Msg 4104, Niveau 16, État 1, Ligne 4
    The multi-part identifier "dbo.events.name" could not be bound.
    Msg 4104, Niveau 16, État 1, Ligne 5
    The multi-part identifier "dbo.calendar.event_time" could not be bound.

    en faite je fait un planning avec filtre et plusieurs vue  pour un site web, et ce planning a la base a été conçue pour fonctionné sur mysql, et je suis entrain de l'adapté avec ma base de données SQL Server, et j'ai modifier pas mal de chose il me reste juste deux erreurs et comme je suis débutant...... 

    Merci 

    Cordialement,

    AZAG.I


    • Modifié ilyas.az vendredi 24 juillet 2015 08:11
    vendredi 24 juillet 2015 08:10
  • Ce genre d'erreur apparaît quand il y a des problèmes de mappage de noms avec des sous-requêtes.

    Je vous conseille de vous assurer que votre requête fonctionne correctement sans votre code de concaténation: faite une requête SELECT * FROM ....

    D'ailleurs je viens de constater que vous avez des ORDER BY dans votre clause SELECT ! Je ne saisi pas totalement le fonctionnement de votre requête.

    Autre point, dans vos requêtes il est conseillé d'utiliser des alias de table et nommer les colonnes via ces alias. Cela améliore la lisibilité de vos requêtes. Au moins évitez de placer le schéma ([dbo].) dans vos noms de colonnes, ca alourdi la requête inutilement.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    vendredi 24 juillet 2015 08:37
  • En voyant bien votre requête, il s'avère que la syntaxe n'est pas celle de SQL Server mais de MySQL. GROUP_CONCAT ne fonctionne pas sur SQL Server d'où les erreurs de syntaxe.

    Please click "Mark As Answer" if my post helped.

    vendredi 24 juillet 2015 09:55