एक sql चर के लिए एक निष्पादन परिणाम कैसे असाइन करें?


108

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

क्या आप ऐसा कुछ कर सकते हैं:

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

जवाबों:


97

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

एक OUTPUT पैरामीटर के साथ नमूना संग्रहित प्रक्रिया:

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

OUTPUT पैरामीटर के साथ संग्रहीत कार्यविधि पर कॉल करें:

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

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

2
बस एक ओर ध्यान दें, एक मान के साथ घोषित किए गए OUTPUT पैरामीटर को इसमें पास होने की आवश्यकता नहीं है। इसका मतलब है कि यदि आप किसी मौजूदा एसपी को बदल रहे हैं, तो आप इसे कुछ भी तोड़ने के बिना सुरक्षित रूप से कर सकते हैं। उदाहरण के लिए, @ Param3 datetime = '1900-01-01' OUTPUT।
मोरवेल

55

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

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

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

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

2
@ "आप अन्य सभी प्रकार के लिए एक ही कर सकते हैं" , निश्चित रूप से काम नहीं करता है UNIQUEIDENTIFIER
जेम्स

1
@ नाम क्यों? अद्वितीय पहचानकर्ता डेटाटाइप के बारे में क्या अलग है? संग्रहित प्रक्रियाएँ अनूठे रूप से नहीं लौट सकतीं?
MZN

3
@Mzn UNIQUEIDENTIFIERकेवल एक उदाहरण था, RETURNकेवल पूर्णांक मानों के साथ काम करने के लिए डिज़ाइन किया गया है, डॉक्स देखें । एसपी से अन्य डेटा प्राप्त करने का अनुशंसित तरीका या तो एक परिणाम सेट या उपयोग वापस करना हैOUTPUT
जेम्स

34
declare @EventId int

CREATE TABLE #EventId (EventId int)

insert into #EventId exec rptInputEventId

set @EventId = (select * from #EventId)

drop table #EventId 

3
वास्तव में केवल काम करने का तरीका संग्रहीत खरीद के हस्ताक्षर को बदलने के अलावा यहां समाप्त हो गया है
माइकल सैंडर

2
इसका उपयोग किसी दिनांक के लिए भी किया जाता है, जब अंतर्निहित स्पोक में आउटपुट पैरामीटर नहीं होता है। (
अंडरसिंग स्प्रोस के पास

3
@MichaelSander पूरी तरह से सही है, अन्य सभी समाधान ओपी प्रश्न का सही उत्तर नहीं दे रहे हैं । एकमात्र तरीका एक अस्थायी तालिका है जो परिणाम रखती है।
एसक्यूएल पुलिस

3
केवल उसी तरीके से यहां काम करने की आवश्यकता होती है, जो मैं अपने मामले में नहीं कर सकता। +1
डीएलएच

आप टेम्‍परेचर टेबल की जगह टेबल वैरिएबल का भी उपयोग कर सकते हैं।
त्रुटि

6

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

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

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


8
ओपी के उदाहरण में वे एक तारीख को वापस करना चाहते हैं, संग्रहीत प्रक्रियाएं केवल कॉलिंग प्रक्रिया या एप्लिकेशन के पूर्णांक मान को पुन: प्राप्त कर सकती हैं।
के.एम.

0

मेरा भी यही सवाल था। जबकि यहाँ अच्छे उत्तर हैं, मैंने एक टेबल-वैल्यू फ़ंक्शन बनाने का फैसला किया। एक तालिका (या स्केलर) मूल्यवान फ़ंक्शन के साथ आपको अपनी संग्रहीत खरीद को बदलना नहीं है। मैंने केवल टेबल-वैल्यू फ़ंक्शन से चयन किया। ध्यान दें कि पैरामीटर (MyParameter वैकल्पिक है)।

CREATE FUNCTION [dbo].[MyDateFunction] 
(@MyParameter varchar(max))
RETURNS TABLE 
AS
RETURN 
(
    --- Query your table or view or whatever and select the results.
    SELECT DateValue FROM MyTable WHERE ID = @MyParameter;
)

अपने वैरिएबल को असाइन करने के लिए आप बस कुछ ऐसा कर सकते हैं:

Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));

आप एक स्केलर मूल्यवान फ़ंक्शन का उपयोग भी कर सकते हैं:

CREATE FUNCTION TestDateFunction()  
RETURNS datetime  
BEGIN  
    RETURN (SELECT GetDate());
END

तब आप बस कर सकते हैं

Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.