2013-04-04 3 views
28

में किसी अन्य संग्रहीत प्रक्रिया में संग्रहीत प्रक्रिया निष्पादित करें SQL सर्वर में किसी अन्य संग्रहीत प्रक्रिया में संग्रहीत प्रक्रिया को मैं कैसे निष्पादित कर सकता हूं? मैं दूसरी प्रक्रिया के पैरामीटर कैसे पास करूंगा।SQL सर्वर

+0

क्या आप इसे सी # में या सर्वर पर स्टोर्डप्रोक के रूप में करने की योजना बना रहे हैं? – MethodMan

+0

'exec' कीवर्ड का उपयोग करें। – Matthew

+0

मुझे सर्वर में निष्पादित करने की आवश्यकता है – Roys

उत्तर

0

आप एक संग्रहीत प्रक्रिया के उपयोगकर्ता-निर्धारित कार्य कॉल कर सकते हैं बारी-बारी से

इससे आपकी समस्या का समाधान हो सकता है संग्रहीत प्रक्रिया कॉल करने के लिए

2

हाँ, आपको लगता है कि इस तरह से कर सकते हैं:

BEGIN 
    DECLARE @Results TABLE (Tid INT PRIMARY KEY); 

    INSERT @Results 

    EXEC Procedure2 [parameters]; 
    SET @total 1; 

END 
SELECT @total 
36

हैं आप केवल अपने दूसरे एसपी द्वारा कुछ विशिष्ट संचालन करना चाहते हैं और एसपी से मूल्यों की आवश्यकता नहीं है तो बस करें:

Exec secondSPName @anyparams 

अन्यथा, यदि आपको अपने पहले एसपी द्वारा अपने पहले एसपी द्वारा लौटाए गए मानों की आवश्यकता है, तो बराबर संख्या के कॉलम के साथ एक अस्थायी तालिका चर बनाएँ और दूसरी एसपी द्वारा कॉलम रिटर्न की एक ही परिभाषा के साथ।

Insert into @tep_table 
Exec secondSPName @anyparams 

अपडेट::

Declare @id ID_Column_datatype 
Set @id=(Select id from table_1 Where yourconditions) 

Exec secondSPName @id 

अद्यतन 2:

दूसरा एसपी को पैरामीटर पारित करने के लिए, यह करने के बाद आप के रूप में में पहले सपा इन मूल्यों को प्राप्त कर सकते हैं

मान लें कि आपका दूसरा एसपी Id और Name देता है जहां का प्रकार idint और namevarchar(64) प्रकार का है।

अब, अगर आप पहले एसपी में इन मूल्यों का चयन करना चाहते तो एक अस्थायी table चर और डालने मूल्यों में बनाएँ:

Declare @tep_table table 
(
    Id int, 
    Name varchar(64) 
) 
Insert into @tep_table 
Exec secondSP 

Select * From @tep_table 

यह आपको मूल्यों से दूसरे सपा लौटे वापस आ जाएगी।

आशा है, यह आपके सभी संदेहों को स्पष्ट करता है।

+0

tanx .. या मैं पहले स्प के अंदर दूसरे स्पैम द्वारा लौटाए गए मानों की आवश्यकता है। बीटी पैरामीटर जिसे मुझे पास करने की आवश्यकता है, पहली प्रक्रिया का आउटपुट है। क्या यह संभव है।? Pls इस उदाहरण को देखते हैं। SP1 तालिका_1 से आईडी का चयन करें। क्या यह आईडी दूसरी प्रक्रिया के पैरामीटर के रूप में पास करना संभव है। – Roys

+0

हां यह सकारात्मक है लेकिन सबसे पहले आपको इस आईडी को एक चर में स्टोर करने की आवश्यकता है और फिर इसे दूसरे स्पैम में पास करना होगा। अद्यतन उत्तर देखें। –

+0

उपरोक्त चरणों work.tanx। मैं पहले एसपी से आउटपुट वैल्यू कैसे प्राप्त कर सकता हूं ..? – Roys

4

मान लीजिए आप इस

पहले संग्रहीत प्रक्रिया की तरह एक संग्रहीत प्रक्रिया है:

Create PROCEDURE LoginId 
    @UserName nvarchar(200), 
    @Password nvarchar(200) 
AS 
BEGIN 
    DECLARE @loginID int 

    SELECT @loginID = LoginId 
    FROM UserLogin 
    WHERE UserName = @UserName AND Password = @Password 

    return @loginID 
END 

अब आप नीचे के रूप में

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

की तरह एक और संग्रहीत प्रक्रिया से इस प्रक्रिया कॉल करना चाहते हैं
Create PROCEDURE Emprecord 
     @UserName nvarchar(200), 
     @Password nvarchar(200), 
     @Email nvarchar(200), 
     @IsAdmin bit, 
     @EmpName nvarchar(200), 
     @EmpLastName nvarchar(200), 
     @EmpAddress nvarchar(200), 
     @EmpContactNo nvarchar(150), 
     @EmpCompanyName nvarchar(200) 

    AS 
    BEGIN 
     INSERT INTO UserLogin VALUES(@UserName,@Password,@Email,@IsAdmin) 

     DECLARE @EmpLoginid int 

     **exec @EmpLoginid= LoginId @UserName,@Password** 

     INSERT INTO tblEmployee VALUES(@EmpName,@EmpLastName,@EmpAddress,@EmpContactNo,@EmpCompanyName,@EmpLoginid) 
    END 

जैसा कि आपने ऊपर देखा है, हम कैल कर सकते हैं एल एक-दूसरे

0

से संग्रहीत प्रक्रिया आपका sp_test: वापसी

USE [MY_DB] 
GO 

IF (OBJECT_ID('[dbo].[sp_test]', 'P') IS NOT NULL) 
DROP PROCEDURE [dbo].sp_test; 
GO 

CREATE PROCEDURE [dbo].sp_test 
@name VARCHAR(20), 
@last_name VARCHAR(30), 
@full_name VARCHAR(50) OUTPUT 
AS 

SET @full_name = @name + @last_name; 

GO 

पूरा नाम अपने sp_main में

... 
DECLARE @my_name VARCHAR(20); 
DECLARE @my_last_name VARCHAR(30); 
DECLARE @my_full_name VARCHAR(50); 
... 

EXEC sp_test @my_name, @my_last_name, @my_full_name OUTPUT; 
... 
0

हाँ, जिस तरह से हम दुकान के अंदर समारोह कॉल करने के लिए इसका आसान प्रक्रिया।

उदा। उपयोगकर्ता को आयु फ़ंक्शन को परिभाषित करें और चयन क्वेरी में उपयोग करें।

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R