2009-03-03 8 views
10

में संग्रहीत संग्रहीत प्रक्रिया के वापसी मूल्य को दबाएं मुझे लगता है कि मुझे एक ही समस्या है क्योंकि Kcrumley प्रश्न "Problem calling stored procedure from another stored procedure via classic ASP" में वर्णित है। हालांकि अपने प्रश्न वास्तव में एक समाधान में शामिल हैं, इसलिए मैं इसे एक और शॉट दे देंगे करता है, अपने ही टिप्पणियों को जोड़ने:एमएस एसक्यूएल: संग्रहीत प्रक्रिया

मैं दो संग्रहित प्रक्रियाओं है:

CREATE PROCEDURE return_1 AS BEGIN 
    SET NOCOUNT ON; 
    SELECT 1 
END 

CREATE PROCEDURE call_return_1_and_return_2 AS BEGIN 
    SET NOCOUNT ON; 
    EXEC return_1 
    SELECT 2 
END 

ध्यान दें कि दोनों प्रक्रियाओं "NOCOUNT पर सेट होते हैं "। जब मैं "call_return_1_and_return_2" निष्पादित करता हूं तो मुझे अभी भी दो रिकॉर्ड सेट मिलते हैं। पहले मान 1, फिर मान 2.

जो ट्रैक से एएसपी (क्लासिक वीबीस्क्रिप्ट एएसपी) फेंकता है।

कोई संकेत देता है कि मैं पहले परिणाम सेट को कैसे दबा सकता हूं? एनओसीएटी के साथ भी क्यों है?

एएसपी में पहला रिकॉर्ड सेट छोड़ना एक विकल्प नहीं है। मुझे "डेटाबेस केवल" समाधान चाहिए।

+0

प्रतिक्रियाओं के एक जोड़े को बाहर ओर इशारा करते हैं कि आप एक का चयन से एक वापस करने के लिए बदल सकते हैं, लेकिन यह एक बड़ा सवाल है - क्या नेस्ट संग्रहीत proc चयन करने के लिए है, क्योंकि कुछ और यह कहता है तो और आप इसे बदल नहीं सकते? मुझे आश्चर्य है कि ऐसा परिणाम सेट "निगलना" संभव है। –

उत्तर

8

यह एनओसीएटी नहीं है जो इसका कारण बनता है, आपकी संग्रहीत प्रक्रियाओं में प्रत्येक का चयन होता है ताकि प्रत्येक व्यक्ति अपने स्वयं के परिणाम सेट में आ रहा हो। चयन करने के बजाए नंबर 1 को पास करने के लिए आउटपुट पैरामीटर का उपयोग करने के लिए अपनी पहली संग्रहीत प्रक्रिया को बदलकर इसे टाला जा सकता है। दूसरी संग्रहीत प्रक्रिया तब डेटा को चलाने के लिए आउटपुट पैरामीटर की जांच कर सकती है, जिसे इसे चलाने की आवश्यकता होती है। इस

CREATE PROCEDURE Proc1 
(
    @RetVal INT OUTPUT 
) 
AS 
SET NOCOUNT ON 
SET @RetVal = 1 


CREATE PROCEDURE Proc2 
AS 
SET NOCOUNT ON 
DECLARE @RetVal int 
EXEC [dbo].[Proc1] 
     @RetVal = @RetVal OUTPUT 
SELECT @RetVal as N'@RetVal' 
2

उन जैसे

कोशिश कुछ चर, लेकिन उत्पादन रिकॉर्ड सेट वापस नहीं कर रहे हैं। मुझे लगता है कि जैसे ही SQL सर्वर क्लाइंट को आउटपुट फहराता है, आप खराब हो जाते हैं और इसे वापस नहीं ले सकते हैं।

मैं इसे एसपी रिटर्न_1 में पैरामीटर जोड़कर हल कर दूंगा, जो रिटर्न_1 रिकॉर्ड का चयन करेगा या बस सामान और चुपचाप बाहर निकल जाएगा।

12

जैसा कि मैट ने अपनी टिप्पणी में बताया, न तो समाधान वास्तव में पहले परिणाम को 'निगल' देता है। मुझे नहीं पता कि आप यह क्यों चाहते हैं लेकिन आप तालिका चर का उपयोग करके पहले निष्पादन के परिणाम को 'निगल' सकते हैं। यह परिणाम सेट के कॉलम की सटीक राशि और प्रकार से मेल खाना चाहिए। इसलिए जैसा:

CREATE PROCEDURE return_1 AS 
    SET NOCOUNT ON; 
    SELECT 1 
GO 
CREATE PROCEDURE call_return_1_and_return_2 AS 
    SET NOCOUNT ON; 
    DECLARE @Result TABLE (res int) 
    insert into @Result EXEC return_1 
    SELECT 2 
GO 

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

  • कोई संबंधित समस्या नहीं^_^