2009-11-06 20 views
13

क्या कोई यह बता सकता है कि इस संग्रहित प्रक्रिया के साथ मैं क्या गलत कर रहा हूं। मैं इसे संकलित करने के लिए नहीं मिल सकता और मेरा सॉफ़्टवेयर इसके साथ गलत क्या है इसके बारे में कोई उपयोगी संकेत नहीं दे रहा है।आईएफ/ईएलएसई संग्रहीत प्रक्रिया

CREATE PROCEDURE web.createSubscriptions 
    (
    @Member_Id BIGINT, 
    @Trans_type VARCHAR(100), 
    @Payment_Status VARCHAR(100), 
    @Payment_Date DATETIME, 
    @Trans_Id VARCHAR(100) 
    ) 

AS 
DECLARE @tmpType VARCHAR(15) 
BEGIN 

INSERT INTO TBL_SUBSCRIPTIONS (subs_MemberID, subs_Type, subs_Status, subs_DateGenerated, subs_PaypalTransaction) VALUES(@Member_Id, @Trans_Type, @Payment_Status, @Payment_Date, @Trans_Id) 

IF(@Trans_type = 'subscr_signup') 
    BEGIN 
    @tmpType = 'premium' 
    END 
ELSE(@Trans_type = 'subscr_cancel') 
    BEGIN 
    @tmpType = 'basic' 
    END 

UPDATE TBL_MEMBERS 
SET members_Type = @tmpType 
WHERE members_Id = @Member_Id 

END 

उत्तर

15

निक सही है आवंटित करने के लिए उपयोग करने के लिए की जरूरत है। अगली त्रुटि यह है कि अन्यथा होना चाहिए यदि (वर्तमान में आपके पास बूलियन अभिव्यक्ति है जो आपके लिए कोई समझ नहीं लेती)।

ELSE(@Trans_type = 'subscr_cancel') 
    BEGIN 
    SET @tmpType = 'basic' 
    END 

यहाँ त्रुटि और SQL सर्वर प्रबंधन स्टूडियो पर भविष्य डबल क्लिक जाना होगा के लिए एक टिप है: यहाँ यह क्या किया जाना चाहिए

ELSE IF(@Trans_type = 'subscr_cancel') 
    BEGIN 
    SET @tmpType = 'basic' 
    END 

आप वर्तमान में निम्न (जो गलत है) है उस रेखा पर जहां त्रुटि रहता है। यदि आपको लगता है कि SQL सर्वर क्रिप्टिक त्रुटियां देता है (जो मुझे नहीं लगता है), तो आपने ओरेकल के साथ काम नहीं किया है!

+0

उत्कृष्ट धन्यवाद। बनाने के लिए मूर्खतापूर्ण गलती। ;-( – Munklefish

+0

खुशी है कि इसे अब क्रमबद्ध किया गया है। – RichardOD

+0

@ मंकलेफ़िश हे, लेकिन मुझे खुशी है कि आपने इसे बनाया है (नहीं कि मैं बुरा हूं लेकिन ..) क्योंकि इससे मुझे एक बुनियादी प्रश्न के साथ मदद मिली जो मैंने एसक्यूएल के बारे में सोचा: पी –

8

यह कोई त्रुटि नहीं दे रहा है? प्रयास करें
SET @tmpType = 'premium '
और
SET @tmpType = 'basic'

+0

मैं सिर्फ इतना है कि कोशिश की में शामिल होने और यह निम्नलिखित बेकार त्रुटि गलत वाक्य रचना के पास रिटर्न '@Trans_type'। – Munklefish

+0

यह निश्चित रूप से समस्या का हिस्सा है – RichardOD

+0

मेरा उत्तर अगला फिक्स है। :-) – RichardOD

1

कोशिश

set @tmptype 
+0

मैं सिर्फ इतना है कि कोशिश की और यह बेकार त्रुटि निम्नलिखित "गलत '@Trans_type' के पास वाक्य रचना" रिटर्न – Munklefish

3

तुम्हें याद कर रहे हैं' जब अगर में अपने चर के बताए .. और ब्लॉक सेट 'बयान?

+0

मैं सिर्फ इतना है कि कोशिश की और यह बेकार त्रुटि निम्नलिखित "गलत पास वाक्य रचना '@Trans_type'" – Munklefish

1

हाँ निक सही है।

आप SET या SELECT @tmpType को

+0

रिटर्न मैंने अभी कोशिश की है और यह निम्नलिखित अनुपयोगी त्रुटि "@Trans_type" के पास गलत वाक्यविन्यास देता है – Munklefish

+0

अगले फिक्स के लिए मेरा उत्तर देखें ... – RichardOD

-1

इस के लिए कोशिश

IF(@Trans_type = 'subscr_signup')  
BEGIN 
set @tmpType = 'premium' 
END 
ELSE iF(@Trans_type = 'subscr_cancel') 
    begin 
    set @tmpType = 'basic' 
    END 
+0

काम नहीं करते हैं। अन्यथा अगर अन्य होना चाहिए। – RichardOD

+0

असली जवाब प्रकट होने के बाद इतनी देर तक एक अजीब टिप्पणी का बिट आया। ;-) – Munklefish

0

बस एक टिप, आप से शुरू और समाप्त की जरूरत नहीं है अगर यह केवल एक ही बयान शामिल हैं।

अर्थात्:

IF(@Trans_type = 'subscr_signup')  
set @tmpType = 'premium' 
ELSE iF(@Trans_type = 'subscr_cancel') 
    set @tmpType = 'basic' 
0

एसक्यूएल के साथ इस प्रयास करें बयान

CREATE PROCEDURE [dbo].[deleteItem] 
    @ItemId int = 0 
AS 
Begin 
DECLARE @cnt int; 

SET NOCOUNT ON 
SELECT @cnt =COUNT(ttm.Id) 
    from ItemTransaction itr INNER JOIN ItemUnitMeasurement ium 
     ON itr.Id = ium.ItemTransactionId INNER JOIN ItemMaster im 
     ON itr.ItemId = im.Id INNER JOIN TransactionTypeMaster ttm 
     ON itr.TransactionTypeMasterId = ttm.Id 
     where im.Id = @ItemId 

if(@cnt = 1) 
    Begin 
    DECLARE @transactionType varchar(255); 
    DECLARE @mesurementAmount float; 
    DECLARE @itemTransactionId int; 
    DECLARE @itemUnitMeasurementId int; 

     SELECT @transactionType = ttm.TransactionType, @mesurementAmount = ium.Amount, @itemTransactionId = itr.Id, @itemUnitMeasurementId = ium.Id 
     from ItemTransaction itr INNER JOIN ItemUnitMeasurement ium 
      ON itr.Id = ium.ItemTransactionId INNER JOIN TransactionTypeMaster ttm 
      ON itr.TransactionTypeMasterId = ttm.Id 
      where itr.ItemId = @ItemId 
     if(@transactionType = 'Close' and @mesurementAmount = 0) 
      Begin 
       delete from ItemUnitMeasurement where Id = @itemUnitMeasurementId; 

      End 
     else 
      Begin 
       delete from ItemTransaction where Id = @itemTransactionId; 
      End 
    End 
else 
Begin 
    delete from ItemMaster where Id = @ItemId; 
End 

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