2010-02-11 18 views
60

एसक्यूएल में एक चर के लिए एक निष्पादन कॉल का परिणाम कैसे आवंटित करते हैं? मेरे पास up_GetBusinessDay नामक संग्रहित प्रो है, जो एक ही तारीख लौटाती है।एक एसक्यूएल चर के लिए निष्पादन परिणाम कैसे असाइन करें?

exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1 
+3

यह SQL सर्वर के लिए है? आपका कोड टीएसक्यूएल की तरह दिखता है। यदि ऐसा है, तो आप ओपी के उदाहरण में "sql-server" –

उत्तर

59

मैं हमेशा त्रुटि स्थिति को वापस करने के लिए वापसी मान का उपयोग करता हूं। यदि आपको एक मान वापस करने की आवश्यकता है तो मैं आउटपुट पैरामीटर का उपयोग करूंगा।

नमूना संग्रहीत प्रक्रिया, एक आउटपुट पैरामीटर के साथ: संग्रहीत प्रक्रिया के लिए

CREATE PROCEDURE YourStoredProcedure 
(
    @Param1 int 
    ,@Param2 varchar(5) 
    ,@Param3 datetime OUTPUT 
) 
AS 
IF ISNULL(@Param1,0)>5 
BEGIN 
    SET @Param3=GETDATE() 
END 
ELSE 
BEGIN 
    SET @Param3='1/1/2010' 
END 
RETURN 0 
GO 

कॉल, एक आउटपुट पैरामीटर के साथ:

DECLARE @OutputParameter datetime 
     ,@ReturnValue  int 

EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT 
PRINT @ReturnValue 
PRINT CONVERT(char(23),@OutputParameter ,121) 

उत्पादन:

0 
2010-01-01 00:00:00.000 
+7

एक OUTPUT पैरामीटर का उपयोग करके, आप किसी भी डेटा प्रकार को वापस कर सकते हैं, संग्रहीत प्रक्रिया से रिटर्न मूल्य केवल एक पूर्णांक हो सकता है। –

+0

+1: सहमत, आपकी टिप्पणी के लिए धन्यवाद। –

+1

बस एक साइड नोट, एक मूल्य के साथ घोषित आउटपुट पैरामीटर को पारित करने की आवश्यकता नहीं है। इसका मतलब है कि यदि आप मौजूदा एसपी को बदल रहे हैं तो आप इसे तोड़ने के जोखिम के बिना सुरक्षित रूप से कर सकते हैं। उदाहरण के लिए, @ पैरा 3 डेटाटाइम = '1 9 00-01-01' आउटपुट। – Morvael

5

documentation से (यह मानते हुए कि आप एसक्यूएल-सर्वर का उपयोग करें):

USE AdventureWorks; 
GO 
DECLARE @returnstatus nvarchar(15); 
SET @returnstatus = NULL; 
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2; 
PRINT @returnstatus; 
GO 

तो हाँ, यह उस तरह से काम करना चाहिए

आप कुछ इस तरह कर सकते हैं।

+7

टैग करते समय अधिक दृश्य और उत्तर प्राप्त करेंगे, वे एक तिथि वापस करना चाहते हैं, संग्रहीत प्रक्रिया केवल कॉलिंग प्रक्रिया या एप्लिकेशन में एक पूर्णांक मान को वापस कर सकती है। –

34

यह काम करेंगे यदि आप बस एक पूर्णांक वापस करना चाहते हैं:

DECLARE @ResultForPos INT 
EXEC @ResultForPos = storedprocedureName 'InputParameter' 
SELECT @ResultForPos 
+8

-1 यह केवल एक पूर्णांक लौटाएगा। ओपी एक तारीख वापस करना चाहता है। @ केएम द्वारा स्वीकृत उत्तर। सही जवाब है, क्योंकि यह रिटर्न के बजाय OUTPUT का उपयोग करता है। –

+3

असल में यह काम करता है। उदाहरण के रूप में एक पूर्णांक प्राप्त करने के लिए उदाहरण के रूप में, आप अन्य सभी प्रकार के लिए भी ऐसा कर सकते हैं (तालिका को संभव नहीं है, लेकिन मुझे लगता है कि हाँ।) मैंने अभी इसे nvarchar (50) के लिए कोशिश की है। – Mzn

+1

@Mzn * "आप अन्य सभी प्रकार के लिए ऐसा ही कर सकते हैं" *, निश्चित रूप से 'अद्वितीय' के साथ काम नहीं करता है। – James

20
declare @EventId int 

CREATE TABLE #EventId (EventId int) 

insert into #EventId exec rptInputEventId 

set @EventId = (select * from #EventId) 

drop table #EventId 
+2

वास्तव में संग्रहित प्रो के हस्ताक्षर –

+1

को बदलने से अलग किए गए एकमात्र कामकाजी तरीके को अंतर्निहित स्पोक में आउटपुट पैरामीटर नहीं होने पर भी एक तारीख के लिए उपयोग किया जाता है। (अंतर्निहित स्पोक में गतिशील एसक्यूएल से इसके अंदर एक और एक्सेल था) –

+2

@ माइकल सैंडर पूरी तरह से सही, अन्य सभी समाधान ** नहीं ** सही ढंग से ओपीएस प्रश्न का उत्तर दे रहे हैं। एकमात्र तरीका एक अस्थायी तालिका है जो परिणाम रखती है। –

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