title: Single If Statement needs Begin & End in code block
body: <p>I ran into this a bit ago and was wondering why the "Begin" &amp; "End" is need to result in correct values.  the if statement(s) is a singleton and does not require the "Begin" &amp; "End"  where multiple statements in the if would require it and if omitted would generate an execution error when trying to create/alter the procedure. </p>
  
  <p>Any ideas as to why this behavior occurs in MS SQL ?????</p>
  
  <p>Thanks, Craig</p>
  
  <p>-- Results Set 2 Return the correct values.</p>
  
  <p>SQL.</p>
  
  <pre><code> 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" &amp; 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" &amp; "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 
  </code></pre>