2010-07-07 9 views
5

में शुरू करने और समाप्त करने की आवश्यकता है, तो मैं कुछ समय पहले इसमें भाग गया था और सोच रहा था कि "शुरुआत" & "एंड" को सही मूल्यों के परिणामस्वरूप क्यों आवश्यकता है। अगर कथन एक सिंगलटन है और उसे "शुरुआती" & "एंड" की आवश्यकता नहीं है, जहां इसमें कई कथन की आवश्यकता होगी और यदि छोड़ा गया है तो प्रक्रिया को बनाने/बदलने की कोशिश करते समय निष्पादन त्रुटि उत्पन्न होगी।सिंगल अगर स्टेटमेंट को कोड ब्लॉक

एमएस एसक्यूएल में यह व्यवहार क्यों होता है इस बारे में कोई विचार ?????

धन्यवाद, क्रेग

- परिणाम सेट 2 वापसी सही मान।

एसक्यूएल।

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(@[email protected]) 
    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(@[email protected]) 
    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

मुझे लगता है कि यदि बिना BEGIN और END के केवल एक निर्देश होना चाहिए। मैं आपके कोडिंग को सुसंगत रखने में मदद के लिए BEGIN .. END को जोड़ना चाहता हूं।

4

स्पष्ट अपने टूट संस्करण के लिए BEGIN और END रों जोड़ा जा रहा है जो नहीं अपने काम संस्करण के समान तर्क है इस पैदा करता है,:

If(@im_weigh_item=1) 
BEGIN 
    If(@rank_wi_ven_ctg='U') 
    BEGIN 
     Select @UOM = 'U' 
    END 
    Else -- this "else" is associated with the wrong "if" 
    BEGIN 
     If(@po_Qty_uom != 'C') 
     BEGIN 
      If(@[email protected]) 
      BEGIN 
       Select @UOM = 'U', @Qty = @Qty * @po_Qty 
      END 
     END 
    END 
END 
4

और बयान हमेशा पूर्ववर्ती निकटतम को बांधता है और के बिना अगर,

: तो तुम्हारा

If(@im_weigh_item=1) 
    If(@rank_wi_ven_ctg='U') 
    Select @UOM = 'U' 
Else 
    If(@po_Qty_uom != 'C') 
    If(@[email protected]) 
    Select @UOM = 'U', @Qty = @Qty * @po_Qty 

के रूप में व्याख्या की है

संबंधित मुद्दे