2011-03-25 12 views
12

क्या निष्पादित प्रक्रिया से लौटाए गए मान को वैरिएबल पर असाइन करना संभव है?सेट @var = exec store_procedure

कुछ

तरह
DECLARE @count int 
SET @count = Execute dbo.usp_GetCount @Id=123 
+0

Yopur सवाल 'के बारे में कार्यकारी @ sql' लेकिन उदाहरण पूछता है कि आप कॉल एक संग्रहीत proc दे। तुम्हे क्या चाहिए? –

उत्तर

24

आप exec के बजाय sp_executesql उपयोग कर सकते हैं अदिश उत्पादन मानकों

DECLARE @out int 

EXEC sp_executesql N'select @out_param=10', 
        N'@out_param int OUTPUT', 
        @[email protected] OUTPUT 

SELECT @out 

exec के लिए करने के लिए आवंटित करने के लिए मैं कैसे एक मेज चर

का उपयोग कर यह करने के लिए की केवल बारे में पता कर रहा हूँ
declare @out table 
(
out int 
) 

insert into @out 
exec('select 10') 

select * 
from @out 

संग्रहीत समर्थक के लिए cedures आप output पैरामीटर या रिटर्न कोड का भी उपयोग करेंगे। उत्तरार्द्ध केवल एक पूर्णांक वापस कर सकता है और आम तौर पर डेटा के बजाय त्रुटि कोड लौटने के लिए प्राथमिकता देता है। दोनों तकनीकों का प्रदर्शन नीचे किया गया है।

create proC#foo 
@out int output 
as 
set @out = 100 
return 99 

go 

declare @out int, @return int 

exec @return = #foo @out output 

select @return as [@return], @out as [@out] 

drop proC#foo 
+0

धन्यवाद। मैं अपने एसपी में ऐसा कुछ करना चाहता हूं; XMLNAMESPACES (DEFAULT 'http://abc.com') SET @out = (SELECT XmlResult.value ('count (// विषयों/विषय)', 'int') के साथ @XmlTable से) लेकिन मुझे वाक्यविन्यास त्रुटि मिलती है। यह मुझे पागल कर रहा है – BumbleBee

+0

इसे स्केलर वैरिएबल को असाइन करने के लिए 'SELECT @out = XmlResult.value' का उपयोग करें। –

+0

धन्यवाद। मुझे संदेश दिखाई देता है (1 पंक्तियां प्रभावित) लेकिन SELECt @out = xmlResult.Value के साथ नतीजे नहीं ... मैं परिणाम कैसे देख सकता हूं? – BumbleBee

23

आप proc में रिटर्न का उपयोग करते हैं

DECLARE @count int 
EXECUTE @count = dbo.usp_GetCount @Id=123 

आउटपुट पैरामीटर

DECLARE @count int 
EXECUTE dbo.usp_GetCount @Id=123, @count OUTPUT 

अस्थायी तालिका/मेज पर परिणाम चर

DECLARE @count int 
DECLARE @cache TABLE (CountCol int NOT NULL) 
INSERT @cache EXECUTE dbo.usp_GetCount @Id=123 
SELECT @count = CountCol FROM @cache 
पुन: निर्देशित

आप नहीं कर सकते हैं संग्रहीत प्रो से एक रिकॉर्डसेट असाइन करें सीधे एक अदिश चर

10

यह करने के लिए हमेशा की तरह के रूप में कई मायनों लेकिन सबसे आसान है करने के लिए:

DECLARE @count int 

Execute @count = dbo.usp_GetCount @Id=123 
+1

हां यह काम करेगा लेकिन यदि आप गिनती मूल्य को कम नहीं करना चाहते हैं और बस इसका इस्तेमाल करें। यह काम नहीं करेगा। – Abe

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