none
pb dans requete RRS feed

  • Question

  • bonjour,

    dans une page j'ai 3 sqldatasource, chacun d'entre eux contient une requete, lors de l'execution du programme, plusieurs messages d'erreurs s'affichent me disant "syntaxe incorrecte vers 'commande'"  "syntaxe incorrecte verss ')'" "syntaxe incorrecte vers 'commande_1'" et enfin syntaxe incorrecte vers ')'". les erreur doivent etre dans mes requetes, aprés analyse je n'arrive pas a trouver les erreurs, peut etre que je suis trop dans mon code et que je n'ai pas assé de recule.

    y a t'il une personne qui puisse m'aider s'il vous plait ?

    voici le code de mon premier sql data source :

    SELECT PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.Nom, COUNT(Commande.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) AS DateFin, CAST(1 AS bit) AS AllowEdit FROM PDP INNER JOIN Localisation ON PDP.IdLocalisation = Localisation.IdLocalisation INNER JOIN Entreprise ON PDP.idEntreprise = Entreprise.idEntreprise LEFT OUTER JOIN Commande ON PDP.idPDP = Commande.idPDP WHERE (PDP.DateSignatureDO IS NOT NULL) AND (PDP.DateSignatureEE IS NOT NULL) AND (DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) >= GETDATE()) GROUP BY PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.NomLocalisation HAVING (PDP.idPDP IN (SELECT Commande1.idPDP FROM DonneurOrdreCommande AS DonneurOrdreCommande1 INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID))) UNION SELECT PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.NomLocalisation COUNT(Commande_1.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) AS DateFin, CAST(CASE WHEN COUNT(Commande_1.idCommande) = 0 THEN 1 ELSE 0 END AS bit) AS Expr1 FROM PDP AS PDP_1 INNER JOIN Localisation AS Localisation_1.IdLocalisation=Localisation_1.IdLocalisation INNER JOIN Entreprise AS Entreprise_1 ON PDP_1.idEntreprise = Entreprise_1.idEntreprise LEFT OUTER JOIN Commande AS Commande_1 ON PDP_1.idPDP = Commande_1.idPDP WHERE (PDP_1.DateSignatureDO IS NOT NULL) AND (PDP_1.DateSignatureEE IS NOT NULL) AND (DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) >= GETDATE()) GROUP BY PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.Nom HAVING (PDP_1.idPDP NOT IN (SELECT Commande1.idPDP FROM DonneurOrdreCommande AS DonneurOrdreCommande1 INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID)))
    
    
    
    

    voici le code de mon second sql data source :

    SELECT PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.Nom, COUNT(Commande.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) AS DateFin, CAST(1 AS bit) AS AllowEdit FROM PDP INNER JOIN Localisation ON PDP.IdLocalisation = Localisation.IdLocalisation INNER JOIN Entreprise ON PDP.idEntreprise = Entreprise.idEntreprise LEFT OUTER JOIN Commande ON PDP.idPDP = Commande.idPDP WHERE (PDP.DateSignatureDO IS NOT NULL) AND (PDP.DateSignatureEE IS NOT NULL) AND (DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) >= GETDATE()) GROUP BY PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.NomLocalisation HAVING (PDP.idPDP IN (SELECT Commande1.idPDP FROM DonneurOrdreCommande AS DonneurOrdreCommande1 INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID))) UNION SELECT PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.NomLocalisation COUNT(Commande_1.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) AS DateFin, CAST(CASE WHEN COUNT(Commande_1.idCommande) = 0 THEN 1 ELSE 0 END AS bit) AS Expr1 FROM PDP AS PDP_1 INNER JOIN Localisation AS Localisation_1.IdLocalisation=Localisation_1.IdLocalisation INNER JOIN Entreprise AS Entreprise_1 ON PDP_1.idEntreprise = Entreprise_1.idEntreprise LEFT OUTER JOIN Commande AS Commande_1 ON PDP_1.idPDP = Commande_1.idPDP WHERE (PDP_1.DateSignatureDO IS NOT NULL) AND (PDP_1.DateSignatureEE IS NOT NULL) AND (DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) >= GETDATE()) GROUP BY PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.Nom HAVING (PDP_1.idPDP NOT IN (SELECT Commande1.idPDP FROM DonneurOrdreCommande AS DonneurOrdreCommande1 INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID)))
    
    

    enfin, voici le code de mon dernier sql data source :

    SELECT PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.NomLocalisation, COUNT(Commande.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) AS DateFin, CAST(1 AS bit) AS AllowEdit FROM PDP  INNER JOIN Localisation ON PDP.idLocalisation = Localisation.idLocalisation INNER JOIN Entreprise ON PDP.idEntreprise = Entreprise.idEntreprise LEFT OUTER JOIN Commande ON PDP.idPDP = Commande.idPDP WHERE (DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) < DATEADD(day, - 1, GETDATE())) AND (PDP.DateSignatureDO IS NOT NULL) AND (PDP.DateSignatureEE IS NOT NULL) GROUP BY PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Localisation.NomLocalisation, Entreprise.Nom HAVING (PDP.idPDP IN (SELECT Commande1.idPDP FROM DonneurOrdreCommande AS DonneurOrdreCommande1 INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID))) UNION SELECT PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.NomLocalisation, COUNT(Commande_1.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) AS DateFin, CAST(CASE WHEN COUNT(Commande_1.idCommande) = 0 THEN 1 ELSE 0 END AS bit) AS Expr1 FROM PDP AS PDP_1 INNER JOIN Localisation AS Localisation_1 ON PDP_1.idLocalisation = Localisation_1.idLocalisation INNER JOIN Entreprise AS Entreprise_1 ON PDP_1.idEntreprise = Entreprise_1.idEntreprise LEFT OUTER JOIN Commande AS Commande_1 ON PDP_1.idPDP = Commande_1.idPDP WHERE (DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) < DATEADD(day, - 1, GETDATE())) AND (PDP_1.DateSignatureDO IS NOT NULL) AND (PDP_1.DateSignatureEE IS NOT NULL) GROUP BY PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Localisation_1.NomLocalisation, Entreprise_1.Nom HAVING (PDP_1.idPDP NOT IN (SELECT Commande1.idPDP FROM DonneurOrdreCommande AS DonneurOrdreCommande1 INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID)))
    
    

     

     cordialement

     

    vendredi 2 avril 2010 14:44

Réponses

  • bonjour,

    je vient de resoudre mon probleme, je n'avais pas encore saisie les données dans ma base,

    merci pour votre aide

    cordialement

    • Marqué comme réponse hamra jeudi 8 avril 2010 09:43
    • Marqué comme réponse hamra jeudi 8 avril 2010 09:43
    jeudi 8 avril 2010 09:42

Toutes les réponses

  • bonjour,

    apres une dizaines d'heure a lire, relire, de A à Z et de Z à A, mes requetes, j'ai reussi a trouver quelques erreurs, cela dit deux erreur perssiste et je n'arrive pas à les trouver, ces erreurs sont  "syntaxe incorrecte verss ')'"  et  syntaxe incorrecte vers ')'"

    y a t'il une personne qui a l'oeil assez fin pour m'aider s'il vous plait ?

    cordialement

    mardi 6 avril 2010 12:03
  • Bonjour,

     

    Je vous conseille de séparer vos requetés en parties singuliers et de vérifier chaque sous-requête. Une pagination plus schématisée serait utile, car vous pouvez tester vos requêtes avec SQL Server Management Studio et voir sur quelle ligne se trouve votre erreur.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mardi 6 avril 2010 15:05
    Modérateur
  • bonjour,

    j'ai realisé les requetes sous microsoft sql server, on m'indique :

    Msg 137, Niveau 15, État 2, Ligne 11

    La variable scalaire "@MyUserID" doit être déclarée.

    Msg 137, Niveau 15, État 2, Ligne 21

    La variable scalaire "@MyUserID" doit être déclarée.

     

    je ne sait pas qu'elle est la source du probleme et comment déclarer "MYUSERID" et meme ou

    pouvez vous me renseigner à ce sujet s'il vous plait?

    cordialement

    mercredi 7 avril 2010 07:10
  • Bonjour,

     

    En regardant votre requête, je comprends que vous avez un ‘select’ avec un paramètre qui reçoit la valeur dans le code. Pour vérifier si la requête est correcte, remplacez @MyUserID (et les autres paramètres aussi) avec une valeur concrète.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mercredi 7 avril 2010 09:20
    Modérateur
  • bonjour,

    merci mais en reagardanr sur la toile, j'ai trouvé qu'en declarant myuser avant le selecr sa fonctionné.

    Declare

     

    @MyUserId int;

    merci pour vos conseils.

    cordialement

    mercredi 7 avril 2010 09:30
  • Oui, ça fonctionne, mais vous devez lui donner aussi une valeur. Ce qui est la même chose que de mettre la valeur directement dans la requête J

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mercredi 7 avril 2010 09:51
    Modérateur
  • pouvez vous  m'aider pour un probleme dans la requetes ? on m'indique que :

    "Toutes les requêtes combinées à l'aide d'un opérateur UNION, INTERSECT ou EXCEPT doivent posséder un même nombre d'expressions dans leurs listes cibles."

    je ne peut donc voir le resultat de ma requete et je ne sait pas qu'elle est la source du probleme

    voici le code de la requete :

    Declare @MyUserId int; SELECT PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.NomLocalisation, COUNT(Commande.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) AS DateFin, CAST(1 AS bit) AS AllowEdit 
    FROM PDP 
    INNER JOIN Localisation ON PDP.idLocalisation = Localisation.idLocalisation 
    INNER JOIN Entreprise ON PDP.idEntreprise = Entreprise.idEntreprise 
    LEFT OUTER JOIN Commande ON PDP.idPDP = Commande.idPDP 
    WHERE (DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) < DATEADD(day, - 1, GETDATE())) AND (PDP.DateSignatureDO IS NOT NULL) AND (PDP.DateSignatureEE IS NOT NULL) 
    GROUP BY PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Localisation.NomLocalisation, Entreprise.Nom 
    HAVING (PDP.idPDP IN (SELECT Commande1.idPDP 
    FROM DonneurOrdreCommande AS DonneurOrdreCommande1 
    INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande 
    WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID) 
    UNION SELECT PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.NomLocalisation, COUNT(Commande_1.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) AS DateFin, CAST(CASE WHEN COUNT(Commande_1.idCommande) = 0 THEN 1 ELSE 0 END AS bit) AS Expr1 
    FROM PDP AS PDP_1 
    INNER JOIN Localisation AS Localisation_1 ON PDP_1.idLocalisation = Localisation_1.idLocalisation 
    INNER JOIN Entreprise AS Entreprise_1 ON PDP_1.idEntreprise = Entreprise_1.idEntreprise 
    LEFT OUTER JOIN Commande AS Commande_1 ON PDP_1.idPDP = Commande_1.idPDP 
    WHERE (DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) < DATEADD(day, - 1, GETDATE())) AND (PDP_1.DateSignatureDO IS NOT NULL) AND (PDP_1.DateSignatureEE IS NOT NULL) 
    GROUP BY PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Localisation_1.NomLocalisation, Entreprise_1.Nom  
    HAVING (PDP_1.idPDP NOT IN (SELECT Commande1.idPDP 
    FROM DonneurOrdreCommande AS DonneurOrdreCommande1 
    INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande 
    WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID)))

    merci pour votre aide!

    cordialement

     

    mercredi 7 avril 2010 09:57
  • Bonjour,

     

    Lorsque vous utilisez UNION, les deux tables fusionnées doivent avoir le même nombre et type de membres. Vérifiez donc que le résultat du premier SELECT a le même nombre de colonnes que le résultat du deuxième SELECT. Aussi, chaque colonne du premier SELECT doit avoir le même type de données que la colonne correspondante dans le deuxième SELECT.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mercredi 7 avril 2010 10:26
    Modérateur
  • bonjour,

    j'ai réalisé toutes les conseils que vous m'avez donné, cela dit le meme probleme persite,

    en realité il y a deux probleme lorsque sur ma derniere ligne je ferme normalement mes parenthéses on m'indique : Msg 102, Niveau 15, État 1, Ligne 22 Syntaxe incorrecte vers ')'.

     lorsque je met cinq parenthèses, alors que seulement trois sont nécessairre, on m'indique :

    Msg 205, Niveau 16, État 1, Ligne 1 Toutes les requêtes combinées à l'aide d'un opérateur UNION, INTERSECT ou EXCEPT doivent posséder un même nombre d'expressions dans leurs listes cibles.

    je suis vraiment perdu car là la source du probleme m'est vraiment mistérieuse. auriez vous une idée de la source du probleme s'il vous plait ?

    voici ma requete sql :

    Declare @MyUserId int; SELECT PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Entreprise.Nom, Localisation.NomLocalisation, COUNT(Commande.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) AS DateFin, CAST(1 AS bit) AS AllowEdit 
    FROM PDP 
    INNER JOIN Localisation ON PDP.idLocalisation = Localisation.idLocalisation 
    INNER JOIN Entreprise ON PDP.idEntreprise = Entreprise.idEntreprise 
    LEFT OUTER JOIN Commande ON PDP.idPDP = Commande.idPDP 
    WHERE (DATEADD(year, 1, dbo.FMinDate(PDP.DateSignatureDO, PDP.DateSignatureEE)) < DATEADD(day, - 1, GETDATE())) AND (PDP.DateSignatureDO IS NOT NULL) AND (PDP.DateSignatureEE IS NOT NULL) 
    GROUP BY PDP.idPDP, PDP.Numero, PDP.Intitule, PDP.DateSignatureDO, PDP.DateSignatureEE, Localisation.NomLocalisation, Entreprise.Nom 
    HAVING (PDP.idPDP IN (SELECT Commande1.idPDP 
    FROM DonneurOrdreCommande AS DonneurOrdreCommande1 
    INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande 
    WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID) 
    UNION SELECT PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Entreprise_1.Nom, Localisation_1.NomLocalisation, COUNT(Commande_1.idCommande) AS NbCommande, DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) AS DateFin, CAST(0 AS bit) AS AllowEdit  
    FROM PDP AS PDP_1 
    INNER JOIN Localisation AS Localisation_1 ON PDP_1.idLocalisation = Localisation_1.idLocalisation 
    INNER JOIN Entreprise AS Entreprise_1 ON PDP_1.idEntreprise = Entreprise_1.idEntreprise 
    LEFT OUTER JOIN Commande AS Commande_1 ON PDP_1.idPDP = Commande_1.idPDP 
    WHERE (DATEADD(year, 1, dbo.FMinDate(PDP_1.DateSignatureDO, PDP_1.DateSignatureEE)) < DATEADD(day, - 1, GETDATE())) AND (PDP_1.DateSignatureDO IS NOT NULL) AND (PDP_1.DateSignatureEE IS NOT NULL) 
    GROUP BY PDP_1.idPDP, PDP_1.Numero, PDP_1.Intitule, PDP_1.DateSignatureDO, PDP_1.DateSignatureEE, Localisation_1.NomLocalisation, Entreprise_1.Nom  
    HAVING (PDP_1.idPDP NOT IN (SELECT Commande1.idPDP 
    FROM DonneurOrdreCommande AS DonneurOrdreCommande1 
    INNER JOIN Commande AS Commande1 ON DonneurOrdreCommande1.idCommande = Commande1.idCommande 
    WHERE (DonneurOrdreCommande1.idDonneurOrdre = @MyUserID)))))

    cordialement

    mercredi 7 avril 2010 11:56
  • Bonjour,

    le plus simple : pars d'une requête toute simple qui fonctionne sur sql server en la testant sous management studio

    SELECT *
    FROM PDP 
    INNER JOIN Localisation ON PDP.idLocalisation = Localisation.idLocalisation 
    INNER JOIN Entreprise ON PDP.idEntreprise = Entreprise.idEntreprise 

     

    Rajoute au fur et à mesure les autres portions de ta requête jusqu'à trouver ce qui pose problème.

    Cordialement

    mercredi 7 avril 2010 12:04
    Modérateur
  • bonjour,

    merci encore pour votre aide

    j'ai réussi a corrigé mes erreurs, cela dit des que je lance mon application sur la page concernée par les requpete elle ne se charge pas pendant 15 min, ensuite elle bug.

    qu'elles peuvent etres les sources du problemes ?

    cordialement ?

    mercredi 7 avril 2010 14:52
  • Bonjour,

     

    Il est possible que votre requête est très demandant de point de vue ressources et elle prend beaucoup de temps pour être exécutée par le serveur. Avez-vous essayé de lancer cette requête directement dans SQL Manager et voir les résultats ? Encore, quel est le bug que vous recevrez dans la page ?

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    jeudi 8 avril 2010 07:56
    Modérateur
  • bonjour,

    je vient de resoudre mon probleme, je n'avais pas encore saisie les données dans ma base,

    merci pour votre aide

    cordialement

    • Marqué comme réponse hamra jeudi 8 avril 2010 09:43
    • Marqué comme réponse hamra jeudi 8 avril 2010 09:43
    jeudi 8 avril 2010 09:42