9

मेरा अनुरोध स्वीकार करने,एसक्यूएल सर्वर संग्रहित प्रक्रिया दुकान वापसी मान

मेरा प्रश्न मैं एक एसक्यूएल सर्वर है कि एक क्षेत्र की गिनती रिटर्न में प्रक्रिया संग्रहित है। मैं इस संग्रहीत प्रक्रिया के परिणामों को एक अलग संग्रहीत प्रक्रिया के चर (स्केलर?) में संग्रहीत करना चाहता हूं।

sp_My_Other_SP: 

CREATE PROCEDURE [dbo].sp_My_Other_SP 
@variable int OUTPUT -- The returned count 
AS 

BEGIN -- SP 

SET NOCOUNT ON; 

SET @SQL = "SELECT COUNT(*) FROM blah" 
EXEC(@SQL) 

END -- SP 

मैं वर्तमान में इसे पसंद करते हैं:

DECLARE @count int 

EXEC sp_My_Other_SP @count OUTPUT 

तब मैं

IF (@count > 0) 
BEGIN 
... 
END 

की तरह उपयोग हालांकि इसकी लौटने अन्य संग्रहित प्रक्रिया के साथ-साथ परिणाम मुख्य संग्रहित प्रक्रिया परिणाम है जो के रूप में मेरे .NET अनुप्रयोग में एक समस्या है।

----------- 
NoColName 
----------- 
14 

----------- 
MyCol 
----------- 
abc 
cde 
efg 

मैं अगर वहाँ एक चर भी उत्पादन नहीं करता है में एक संग्रहीत प्रक्रिया के परिणाम को स्टोर करने के लिए एक रास्ता है जानना चाहूंगा (ऊपर परिणाम सेट के किसी प्रयास किए प्रतिनिधित्व लौट आए है) यह।

किसी भी मदद के लिए धन्यवाद।

+2

आपको अपना प्रश्न स्पष्ट नहीं होने के बाद हमें और कोड दिखाना होगा। –

+0

मैं सहमत हूं .. हमें पूरा संदर्भ दिखाएं .. "अन्य" संग्रहीत प्रो को कॉल करें। – madcolor

+0

समस्या यह है कि गिनती लौटने वाले स्पोक में इसके परिणामस्वरूप उससे अधिक शामिल है, और यह आउटपुट दूसरे स्पोक में बदल रहा है। –

उत्तर

12

आप संग्रहीत प्रक्रिया के परिणामों को एक अस्थायी तालिका में कैप्चर कर सकते हैं ताकि कॉलिंग संग्रहीत प्रक्रिया द्वारा इसे वापस नहीं किया जा सके।

create table #temp (id int, val varchar(100)) 
insert into #temp 
exec sp_My_Other_SP @value, @value, @value, @count OUTPUT 
+2

मैं इस दृष्टिकोण का इस्तेमाल किया बल्कि एक हैश तालिका की तुलना में मैं टेबल अदिश की तरह प्रकार प्रयोग किया है: घोषित @temp_tbl टेबल (मूल्य पूर्णांक) सम्मिलित @temp_tbl EXEC sp_My_SP \t \t \t सेट @count = जांच (चयन टॉप 1 @temp_tbl से मूल्य) – Phil

+0

यह निश्चित रूप से कम कुशल है क्योंकि आप उस डेटा का चयन कर रहे हैं जिसकी आपको परवाह नहीं है। आप sp_My_Other_SP पर एक नया पैरामीटर जोड़ने से बेहतर होंगे जो कि अगर आप केवल गिनती की तलाश में हैं तो परिणाम सेट लौटाया गया है या नहीं। –

+0

यह समझ में नहीं आता है, मुझे गिनती की परवाह है क्योंकि मैं हमेशा इसका उपयोग करता हूं और बाकी एसपी के लिए यह महत्वपूर्ण है। – Phil

4

खैर, इसे ठीक करने का सबसे आसान तरीका संग्रहित प्रो को रिकोड करना है ताकि चयनकर्ता जो 'अन्य' परिणाम देता है, सेट करें, आप इस मामले में नहीं चाहते हैं कि आप सशर्त रूप से निष्कासित हो जाएं, केवल तभी जब आप नहीं पूछ रहे हों गिनती

अन्य पैरामीटर @GetCount

बुलाया
@GetCount TinyInt Defualt = 0 // or 
@GetCount Bit Default = 0 

फिर जोड़े के बजाय सिर्फ

Select ... 

लिखने

If @GetCount = 1 
    Select ... 
2

आप

SELECT @variable = COUNT(*) FROM blah" 
-- don't do EXEC(@SQL) 

को

SET @SQL = "SELECT COUNT(*) FROM blah" 
EXEC(@SQL) 

बदल रहा करने की कोशिश की है?

0
THE FIRST PROCEDURE: 
CREATE PROC DD43 
@ID INT OUTPUT AS 
(SELECT @ID=COUNT(*) FROM CS2) 

SECOND PROCEDURE: 

CREATE PROC DD45 AS 
DECLARE @COUNT INT 
DECLARE @COUN INT 
EXEC DD43 @COUN OUT --CALLING THE FIRST PROCEDURE 
SET @COUNT= (SELECT @COUN) 
SELECT @COUNT 

EXEC DD45 
+2

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, यह समझाना बेहतर होगा कि यह समस्या को हल करता है और इसका उपयोग क्यों किया जाता है। कोड-केवल उत्तर लंबे समय तक उपयोगी नहीं होते हैं। –

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