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?