2011-02-28 12 views
5

मैंने गिनती वापस करने के लिए एक संग्रहित प्रक्रिया लिखी। लेकिन मुझे एक शून्य मूल्य मिला। क्या कोई मुझे बता सकता है कि मेरी संग्रहीत प्रक्रिया में समस्या कहां है।संग्रहीत प्रक्रिया में वापसी की गणना

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
go 

ALTER PROCEDURE [dbo].[ValidateUser] 
@UserName varchar(50), 
@Password varchar(50), 
@Num_of_User int output 

AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT @Num_of_user =COUNT(*) 
    FROM login 
    WHERE username = @UserName 
    AND pw = @Password 

    RETURN 

END 
+1

आप उस मूल्य को पढ़ने की कोशिश कैसे कर रहे हैं? –

+0

@BenCr आपको रिटर्न वैल्यू के रूप में गिनती कैसे प्राप्त करें, या आपके संग्रहीत प्रक्रिया के हिस्से के रूप में परिभाषित आउटपुट पैरामीटर का उपयोग करने के लिए बताता है। @atbebtg आपको बताता है कि परिणाम को परिणाम के रूप में कैसे प्राप्त किया जाए। – Suncat2000

उत्तर

2

यह वास्तव में गिनती वापस नहीं करता है, यह एक आउटपुट पैरामीटर है।

या तो अपने sproc को @num_of_user वापस करने के लिए बदलें या वापसी मान के बजाय आउटपुट पैरामीटर की जांच करें।

+0

मेरा कोड आउटपुट पैरामीटर की जांच कर रहा है लेकिन यह शून्य है। अब मैं {ALTER प्रक्रिया [dbo]। [ValidateUser] \t @ उपयोगकर्ता नाम varchar (50), \t @Password varchar (50), \t @Num_of_User पूर्णांक आउटपुट के रूप में sproc \t के रूप में शुरुआत \t सेट NOCOUNT संशोधित पर; \t COUNT का चयन करें (*) Num_of_user के रूप में लॉगिन कहां उपयोगकर्ता नाम = @ उपयोगकर्ता नाम और पीडब्लू = @ पासवर्ड अंत} और num_of_user से अभी भी रिक्त है। मैं एसपीआरसी में अच्छा नहीं हूँ। कृपया मदद करे। – user637995

+0

कॉलिंग कोड और आपके डीबी की पूरी प्रति के बिना मुझे नहीं पता कि मैं कैसे मदद कर सकता हूं। क्या आपने SQL सर्वर प्रबंधन स्टूडियो से अपने SPROC का परीक्षण किया है? क्या यह डेटा या कॉलिंग कोड में कोई समस्या है? – BenCr

6

आप वैरिएबल @num_of_user में मान सेट कर रहे हैं। क्वेरी

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
go 


ALTER PROCEDURE [dbo].[ValidateUser] 
    @UserName varchar(50), 
    @Password varchar(50), 
    @Num_of_User int output 

AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT @Num_of_user =COUNT(*) 
     FROM login 
     WHERE [email protected] AND [email protected] 

    SELECT @Num_of_user 
return 
END 
+0

यदि आप कोड, एक्सएमएल या डेटा नमूने पोस्ट करते हैं, ** कृपया ** टेक्स्ट एडिटर में उन पंक्तियों को हाइलाइट करें और संपादक टूलबार पर "कोड नमूने" बटन ('{}') पर क्लिक करें ताकि इसे अच्छी तरह प्रारूपित किया जा सके और इसे हाइलाइट किया जा सके! –

1

प्रक्रियाओं और एसक्यूएल सर्वर में कार्य थोड़ा मेरे लिए भ्रमित कर रहे हैं के बाद चयन @num_of_user जोड़ने के लिए, के बाद से एक प्रक्रिया भी मान सकते हैं। हालांकि, अगर आप प्राप्त कर सकते हैं कि आप क्या उत्पादन पैरामीटर @Num_of_user को दूर करने और साथ

SELECT COUNT(*) 
    FROM login 
    WHERE username = @UserName 
    AND pw = @Password 

पिछले चुनिंदा बयान हमेशा एसक्यूएल सर्वर में एक प्रक्रिया से दिया जाता है

SELECT @Num_of_user =COUNT(*) 
    FROM login 
    WHERE username = @UserName 
    AND pw = @Password 

की जगह चाहते हैं।

0

आपको इस्लाम की आवश्यकता नहीं है। गिनती चुनें (*) हमेशा एक गैर-शून्य मान वापस करें। आप

select count(*) from anytable where 1=2 

जारी कर सकते हैं और आपको 0 मिल जाएगा, न कि शून्य। मुझे लगता है कि जब आप एसपी निष्पादित करते हैं तो आपकी समस्या आती है। आपको @Num_of_User के बगल में 'आउटपुट' कीवर्ड की कमी हो सकती है। आपका कॉल की तरह

declare @outNum int 
exec ValidateUser 'some', 'wrong', @outNum output 
print @outNum 

सूचना पैरामीटर

0

बस एक और विधि का सही संग्रहित प्रक्रिया के लिए, लेकिन बाहर 'उत्पादन' कीवर्ड कुछ किया जाना चाहिए एक सरल SELECT @@ROWCOUNT पंक्तियों की संख्या प्राप्त करने के लिए काम कर सकते हैं ।

0

एक ही समस्या थी जब यह शून्य हो गई; ब्रांड्स का उपयोग करने का प्रयास करें:

SELECT @Num_of_user = (COUNT(*) 
    FROM login 
    WHERE username = @UserName 
    AND pw = @Password) 
संबंधित मुद्दे