6
votes

Simple Si la déclaration a besoin de commencer et de fin dans le bloc de code

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 


0 commentaires

3 Réponses :


4
votes

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.


0 commentaires

4
votes

Ajout explicite Commencer s et Fin s à votre version cassée produit ceci, que ne n'a pas la même logique que votre version de travail: xxx


0 commentaires

5
votes

Déclaration d'autre se lie toujours à la précédente la plus proche si sans autre, votre xxx

est interprété comme suit: xxx


0 commentaires