Bonjour j'ai une déclaration SQL
INSERT INTO Foundation.TaxLiability.EmpowerSystemCalendarCode SELECT SystemTax.SystemTaxID, EmpowerCalendarCode.CalendarCodeID ,CASE WHEN EmpowerCalendarCode.CalendarName LIKE '%Monthly%' THEN 3 WHEN EmpowerCalendarCode.CalendarName LIKE '%Annual%' THEN 2 WHEN EmpowerCalendarCode.CalendarName LIKE '%Quarterly%' THEN 4 ELSE 0 END FROM Foundation.Common.SystemTax SystemTax, Foundation.TaxLiability.EmpowerCalendarCode EmpowerCalendarCode WHERE SystemTax.EmpowerTaxCode = EmpowerCalendarCode.LongAgencyCode and SystemTax.EmpowerTaxType = EmpowerCalendarCode.EmpowerTaxType
3 Réponses :
Pour un, je voudrais mettre à jour votre SQL à cela afin que vous utilisiez un deux, que se passe-t-il si vous supprimez le joindre code> sur votre instruction code> sur votre code> au lieu de la placer dans un
où code > Clause.
insérer dans code>? p> p> p>
@bluefeet: C'est la fin de la journée et mes yeux sont fatigués. Je comprends le changement de syntaxe que vous avez fait, mais je ne comprends pas comment il est fonctionnellement différent. Qu'est-ce que je ne vois pas?
Je ne suis pas convaincu d'un changement fonctionnel "corrigé" le problème. Je suppose que l'OP a apporté d'autres modifications au code (ou nettoyé de mauvaises données, ou les deux) en plus du changement de syntaxe.
@Aaron Bertrand a accepté, je ne pense pas que cela soit "corrigé" le problème non plus. Je venais d'offrir une meilleure façon d'écrire la requête sans utiliser une clause où
Essayez de décider de tout problème de sensibilité de cas avec Upper (): P>
cas lorsque la tige (isnull (empruntcalendarcode.calendarname, «aucun»)) aime '% mensuel%' puis 3 ... p> Li> ol>
Vous pouvez aussi faire comme ça. Je pense que cela fonctionnera.
Que montre-t-il si vous supprimez la première ligne (le
insérer dans ... code>)?
Comment savez-vous que les rangées avec 0 ne sont pas déjà dans la table? Je remarque que vous n'avez pas vraiment d'où les clauses autres que les critères de jointure (c'est pourquoi il est souvent préférable d'utiliser une jointure intérieure explicite au lieu de la table à l'ancienne, des jointures de table). Je suggère d'identifier ces lignes avec un choix et de quitter la table de destination pour le moment.
Je suis d'accord avec @ypercube, que si vous retirez l'insert dans et remplacez la réécriture de la sélection avec
Sélectionnez SystemTax.Systemtaxid, EMPOWERCALENDARCODE.CALENDARCODEID, EMPOWERCALENDARCODE.CALENDNAME CODE>. Votre déclaration de cas a l'air d'être correcte, alors il doit y avoir quelque chose dans votre endroit où cela lance des choses.
Selon @ypercube, mais aussi i> Sélectionnez
EMPOWERCALENDARCODE.CALENDNAME CODE> Juste pour voir ce que vous obtenez (c.-à-d. Peut-être que la jointure n'est pas bonne et c'est tout NULLS, etc.)
Essayez de renvoyer la valeur de colonne EmPowerCalendar.calendarcode ainsi que l'instruction CASE et exécutez la requête uniquement (sans l'insert). Cela devrait s'assurer que la valeur calendronnée est ce que vous pensez.
Donc, si vous ajoutez EmPowerCalendarcode.calendarname à votre liste Sélectionner, vous pouvez voir "trimestriel (EOM)" de la même ligne que 0?