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))
3 Réponses :
Vous ne pouvez pas utiliser si code> Expression intérieure. P>
Si vous souhaitez vérifier une condition ( non supporté car il n'est pas une syntaxe SQL correcte que vous pouvez faire: p> Vous devez Vérifiez si les performances de la requête résultante seraient satisfaisantes. p> Il serait probablement préférable d'exécuter la requête qui obtient la source code> d'abord code> puis exécutez la requête avec la condition supplémentaire ou sans cela en fonction de la source et existe ... code> clause) uniquement si une autre condition contient (la source est
manuel code>) et que vous voulez le faire dans une requête au lieu de:
code > 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). p> p>
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)))
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
) code> dans
# {meetid}) code>
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ù code> (
où reg.is_waitlist = 0 code> ... `)?
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?