टी-एसक्यूएल को संग्रहीत कार्यविधि का चयनित मूल्य मिलता है


95

T-SQL में, यह अनुमति है:

DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

तो, यह संभव है कि एक SELECT का मूल्य प्राप्त करें और इसे एक चर में सामानित करें (बशर्ते कि यह अदिश हो, जाहिर है)।

यदि मैं संग्रहीत प्रक्रिया में समान चयन तर्क रखता हूं:

CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

क्या मैं इस संग्रहित प्रक्रिया का आउटपुट प्राप्त कर सकता हूं और इसे एक चर में भर सकता हूं?

कुछ इस तरह:

DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt

(मुझे पता है कि उपर्युक्त वाक्यविन्यास की अनुमति नहीं है क्योंकि मैंने इसे आज़माया था!)

जवाबों:


191

आपके द्वारा उपयोग किए जाने वाले तीन तरीके हैं: RETURN मान, और OUTPUT पैरामीटर और एक परिणाम सेट

यदि आप पैटर्न का उपयोग करते हैं, तो भी देखें: SELECT @Variable=column FROM table ...

यदि क्वेरी से कई पंक्तियाँ वापस आती हैं, तो आपके @Variable में केवल क्वेरी द्वारा दी गई अंतिम पंक्ति का मान होगा।

RETURN VALUE
आपकी क्वेरी के अंतरंग क्षेत्र को लौटाता है, कम से कम आपके नाम के आधार पर। आप इस ट्रिक का उपयोग कर सकते हैं:

CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int

SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO

और अब अपनी प्रक्रिया को कॉल करें जैसे:

DECLARE @SelectedValue int
       ,@Param         int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue

यह केवल INT के लिए काम करेगा, क्योंकि RETURN केवल एक ही अंतर मान वापस कर सकता है और नल शून्य में परिवर्तित हो जाते हैं।

आउटपुट पैरामीटर
आप एक आउटपुट पैरामीटर का उपयोग कर सकते हैं:

CREATE PROCEDURE GetMyInt
( @Param     int
 ,@OutValue  int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO

और अब अपनी प्रक्रिया को कॉल करें जैसे:

DECLARE @SelectedValue int
       ,@Param         int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue 

आउटपुट पैरामीटर केवल एक मान वापस कर सकते हैं, लेकिन कोई भी डेटा प्रकार हो सकता है

परिणाम सेट के लिए परिणाम सेट करें जैसी प्रक्रिया करें:

CREATE PROCEDURE GetMyInt
( @Param     int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO

इसका उपयोग करें जैसे:

DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
    EXEC GetMyInt @Param
SELECT * FROM @ResultSet 

परिणाम सेट में कई पंक्तियाँ और किसी भी डेटा प्रकार के कई कॉलम हो सकते हैं


5
ध्यान दें कि परिणाम सेट दृष्टिकोण को इस तालिका / प्रविष्टि के उपयोग की आवश्यकता होती है, भले ही केवल एक रिकॉर्ड लौटाया गया हो। मैं सीधे एक चर में एक शॉर्टकट के लिए देख रहा था, लेकिन वहाँ एक नहीं है।
गोयडे

क्या बहु-पंक्ति परिणाम में 'वापसी मान' और 'आउटपुट पैरामीटर' दृष्टिकोण का उपयोग करना संभव है?
जी-रूह

@ जी-आरयूएच, एक संग्रहीत प्रक्रिया एक, कोई नहीं, कुछ या सभी का उपयोग कर सकती है: परिणाम सेट, वापसी आउटपुट पैरामीटर, और / या वापसी मूल्य
के.एम.

4

एक संयोजन भी है, आप एक रिकॉर्डसेट के साथ रिटर्न मान का उपयोग कर सकते हैं:

--संग्रहीत प्रक्रिया--

CREATE PROCEDURE [TestProc]

AS
BEGIN

    DECLARE @Temp TABLE
    (
        [Name] VARCHAR(50)
    )

    INSERT INTO @Temp VALUES ('Mark') 
    INSERT INTO @Temp VALUES ('John') 
    INSERT INTO @Temp VALUES ('Jane') 
    INSERT INTO @Temp VALUES ('Mary') 

    -- Get recordset
    SELECT * FROM @Temp

    DECLARE @ReturnValue INT
    SELECT @ReturnValue = COUNT([Name]) FROM @Temp

    -- Return count
    RETURN @ReturnValue

END

- कोडिंग कोड--

DECLARE @SelectedValue int
EXEC @SelectedValue = [TestProc] 

SELECT @SelectedValue

--Results--

यहां छवि विवरण दर्ज करें


मुझे php में यह परिणाम कैसे मिलेगा?
हागहूड

3

आपको रिटर्न वैल्यू का उपयोग करना होगा।

DECLARE @SelectedValue int

CREATE PROCEDURE GetMyInt (@MyIntField int OUTPUT)
AS
SELECT @MyIntField = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

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

EXEC GetMyInt OUTPUT @SelectedValue

2

ऐसा करने की कोशिश करें:

EXEC @SelectedValue = GetMyInt

7
यह गलत है। जब तक SPROC के अंदर निर्दिष्ट नहीं किया जाता है एक चयनित कथन SPROC का रिटर्न मान नहीं बन जाता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.