-3
votes

Syntaxe incorrecte près ')'. SQL Query est incorrect lors de l'exécution sur DBeaver et sur les fichiers de mapper Java?

  DECLARE @source as NVARCHAR(MAX) = (SELECT md.[source] FROM sports_service.meet.meet_detail md WHERE md.meet_id = #{meetId})

    WHERE reg.is_waitlist = 0 AND reg.cancelled_dt IS NULL 
          AND NOT EXISTS (
            SELECT 1 FROM sports_service.meet.meet_invitations i
            WHERE i.meet_id = pmm.meet_id AND i.sports_person_id = reg.sports_person_id) 
     IF @source != 'MANUAL'
          AND EXISTS (
            SELECT 1 
            FROM sports_service.meet.session session
                INNER JOIN sports_service.meet.event event ON event.session_id = session.id 
                WHERE pmm.meet_id = session.meet_id
                    AND sports_service.dbo.fnGetMeetAge(p.birth_dt, detail.age_up_date, detail.id_format) <![CDATA[>=]]> event.low_age
                    AND sports_service.dbo.fnGetMeetAge(p.birth_dt, detail.age_up_date, detail.id_format) <![CDATA[<=]]> event.high_age
                    AND (event.eligible_gender IS NULL OR event.eligible_gender = p.gender))

8 commentaires

On dirait que vous avez fait une erreur dans votre SQL, mais sérieusement, cela est trop vague pour vérifier.


Pourquoi votre requête a-t-elle des artefacts rubis et html?


Supprimer le ) dans # {meetid})


Ruakh S'il vous plaît seulement se concentrer sur mon énoncé de contrôle de condition SQL si @source! = 'Manuel' est-ce correct ou non?


Pouvez-vous poster un message d'erreur complet. Publiez également le code SQL qui passe sur le pilote SQL sans XML s'échappant et d'autres choses.


Quand pouvez-vous démarrer une instruction SQL avec ( où reg.is_waitlist = 0 ... `)?


Pour répondre à ma propre question, je vois maintenant que la requête a été éditée d'une manière qui le rend incomplète et incorrect.


C'est une standard invalide SQL pour commencer. Quel produit DBMS utilisez-vous?


3 Réponses :


0
votes

Vous ne pouvez pas utiliser si Expression intérieure.


0 commentaires

2
votes

Si vous souhaitez vérifier une condition ( et existe ... clause) uniquement si une autre condition contient (la source est manuel ) et que vous voulez le faire dans une requête au lieu de: xxx

non supporté car il n'est pas une syntaxe SQL correcte que vous pouvez faire: xxx

Vous devez Vérifiez si les performances de la requête résultante seraient satisfaisantes.

Il serait probablement préférable d'exécuter la requête qui obtient la source d'abord puis exécutez la requête avec la condition supplémentaire ou sans cela en fonction de la source valeur. Pour ce faire, vous pouvez générer la requête en mybatis en utilisant SQL dynamique ( y compris ou excluant cette condition supplémentaire).


0 commentaires

1
votes

Comme vous ne pouvez pas utiliser si l'expression intérieure, vous pouvez écrire votre SQL comme ceci:

DECLARE @source as NVARCHAR(MAX) = (SELECT md.[source] FROM sports_service.meet.meet_detail md WHERE md.meet_id = #{meetId})

    WHERE reg.is_waitlist = 0 AND reg.cancelled_dt IS NULL
    AND NOT EXISTS (
    SELECT
    1
    FROM
    sports_service.meet.meet_invitations i
    WHERE
    i.meet_id = pmm.meet_id
    AND i.sports_person_id = reg.sports_person_id)
    AND ( @source <> 'MANUAL' 
    AND 
    EXISTS ( SELECT 1 FROM
    sports_service.meet.session session
    INNER JOIN sports_service.meet.event event ON
    event.session_id = session.id
    WHERE
    pmm.meet_id = session.meet_id
    AND sports_service.dbo.fnGetMeetAge(p.birth_dt,
    detail.age_up_date,
    detail.id_format) >= event.low_age
    AND sports_service.dbo.fnGetMeetAge(p.birth_dt,
    detail.age_up_date,
    detail.id_format) <= event.high_age
    AND (event.eligible_gender IS NULL
    OR event.eligible_gender = p.gender)))


0 commentaires