Je l'ai rencontré un peu il y a un peu et je me demandais pourquoi le "commencement" et "fin" est nécessaire de donner des valeurs correctes. La ou les instructions IF est un singleton et ne nécessite pas le "Begin" & "Fin" où plusieurs instructions de l'IF auraient besoin et si omis généreraient une erreur d'exécution lors de la tentative de création / modification de la procédure.
Des idées sur la raison pour laquelle ce problème se produit dans MS SQL ????? P>
Merci, Craig P>
- Résultats Set 2 Retournez les valeurs correctes. P>
SQL. P>
Declare @Qty DECIMAL(10,2), @UOM VARCHAR(5), @CasePack Numeric(7,1), @CaseQty Numeric(11, 4), @im_weigh_item SmallInt, @rank_wi_ven_ctg Char(1), @po_qty_uom Char(1), @po_Qty float Select -- these 2 Params are Const in this process @im_weigh_item =0, @rank_wi_ven_ctg = 'C', -- Set Values @UOM = 'C' , @po_Qty_uom = 'M', @po_Qty = 3, @casepack =6, @Qty = 2 /* Check and Set vars. accordingly This Conditional Block Generates no errors, but the results are incorrect ** NO "Begin" & End" */ If(@im_weigh_item=1) If(@rank_wi_ven_ctg='U') Select @UOM = 'U' Else If(@po_Qty_uom != 'C' ) If(@po_Qty!=@casepack) Select @UOM = 'U', @Qty = @Qty * @po_Qty -- Debug Select @po_Qty_uom as po_Qty_uom, @UOM as UOM, @casepack as casepack, @po_Qty as po_Qty, @Qty as Qty -- Debug -- reset vars, test 2 Select @UOM = 'C' , @po_Qty_uom = 'M', @po_Qty = 3, @casepack =6, @Qty =2 /* *** Works *** Calcs Correctly Check and Set vars. accordingly *** This Block uses the "Begin" & "End" */ If(@im_weigh_item=1) begin If(@rank_wi_ven_ctg='U') Select @UOM = 'U' end Else begin If(@po_Qty_uom != 'C' ) If(@po_Qty!=@casepack) Select @UOM = 'U', @Qty = @Qty * @po_Qty end -- Debug Select @po_Qty_uom as po_Qty_uom, @UOM as UOM, @casepack as casepack, @po_Qty as po_Qty, @Qty as Qty -- Debug
3 Réponses :
Je pense que le si sans début et la fin ne doit contenir qu'une seule instruction. Je suggère d'ajouter commencer .. finissez à chaque si, pour aider à garder votre codage cohérent. P>
Ajout explicite Commencer code> s et
Fin code> s à votre version cassée produit ceci, que ne EM> n'a pas la même logique que votre version de travail:
Déclaration d'autre se lie toujours à la précédente la plus proche si sans autre, votre est interprété comme suit: p>