2008-10-04 14 views
37

मैं संग्रहीत प्रक्रिया के भीतर संग्रहीत प्रक्रिया को निष्पादित करना चाहता हूं, उदा।संग्रहीत प्रक्रिया में संग्रहीत प्रक्रिया को निष्पादित करना

EXEC SP1 

BEGIN 

EXEC SP2 
END 

लेकिन मैं के बाद ही SP2 चलना समाप्त कर दिया खत्म करने के लिए SP1 चाहते तो मैं SP1 के लिए एक तरह से SP2SP1 समाप्त होने से पहले समाप्त होने की प्रतीक्षा करने के लिए खोजने की जरूरत है।

SP2 तो मैं की तरह कुछ है SP1 के हिस्से के रूप निष्पादित किया जा रहा है:

CREATE PROCEDURE SP1 
AS 
BEGIN 

EXECUTE SP2 

END 
+0

टैग बदलाव - "सर्वर" कुछ गलत परिणामों की – finnw

+0

हाय, retagged का कारण बना। हम mssql और sqlserver टैग को तर्कसंगत बना रहे हैं। – ConcernedOfTunbridgeWells

+2

ऐसा लगता है कि यह प्रश्न एक [डुप्लिकेट] है (http://stackoverflow.com/questions/170440/stored-procedure-not-being-executed-within-another-stored-procedure)। कृपया केवल एक बार अपने प्रश्न पूछें। – Rick

उत्तर

3

यही है कि यह कैसे क्रम में चलाने संग्रहित प्रक्रियाओं काम करता है, तो आप सिर्फ

exec dbo.sp1 
exec dbo.sp2 
+1

आप इसे एक लेनदेन में भी लपेट सकते हैं, यह भी सुनिश्चित करें कि यह सभी सही तरीके से निष्पादित हो। – mattruma

11
की तरह कुछ शुरू की जरूरत नहीं है

यहां हमारे संग्रहित प्रक्रियाओं में से एक का उदाहरण है जो इसके भीतर कई संग्रहीत प्रक्रियाओं को निष्पादित करता है:

ALTER PROCEDURE [dbo].[AssetLibrary_AssetDelete] 
(
    @AssetID AS uniqueidentifier 
) 
AS 

SET NOCOUNT ON 

SET TRANSACTION ISOLATION LEVEL READ COMMITTED 

EXEC AssetLibrary_AssetDeleteAttributes @AssetID 
EXEC AssetLibrary_AssetDeleteComponents @AssetID 
EXEC AssetLibrary_AssetDeleteAgreements @AssetID 
EXEC AssetLibrary_AssetDeleteMaintenance @AssetID 

DELETE FROM 
    AssetLibrary_Asset 
WHERE 
    AssetLibrary_Asset.AssetID = @AssetID 

RETURN (@@ERROR) 
32

टी-एसक्यूएल असीमित नहीं है, इसलिए आपके पास वास्तव में एसपी 2 समाप्त होने तक प्रतीक्षा करने के अलावा कोई विकल्प नहीं है। सौभाग्य से, यही वही है जो आप चाहते हैं।

CREATE PROCEDURE SP1 AS 
    EXEC SP2 
    PRINT 'Done' 
1

हाय मैं मेरी समस्या ने पाया है कि SP2 SP1 के भीतर से निष्पादित नहीं करता है जब SP1 क्रियान्वित किया जाता है।

ALTER PROCEDURE SP1 
AS 
BEGIN 

Declare c1 cursor.... 

open c1 
fetch next from c1 ... 

while @@fetch_status = 0 
Begin 

... 

Fetch Next from c1 
end 

close c1 

deallocate c1 

exec sp2 

end 
+2

अगली बार बस पूरा कोड पोस्ट करें ... यह हमें बहुत समय और प्रयास बचाएगा। – mattruma

1

आपका SP2 शायद नहीं SP1 में जल्दी कोड में कुछ विफलता के कारण इतना EXEC SP2 पूरा नहीं हुआ है चल रहा है:

नीचे SP1 की संरचना है।

कृपया अपना पूरा कोड पोस्ट करें।

9

इनलाइन संग्रहीत प्रक्रिया जिसे हम अपनी ज़रूरत के अनुसार उपयोग करते हैं। उदाहरण विभिन्न मूल्यों हम प्रश्नों में उपयोग करने के लिए के साथ अलग ही पैरामीटर की तरह ..

Create Proc SP1 
(
@ID int, 
@Name varchar(40) 
-- etc parameter list, If you don't have any parameter then no need to pass. 
) 

    AS 
    BEGIN 

    -- Here we have some opereations 

-- If there is any Error Before Executing SP2 then SP will stop executing. 

    Exec SP2 @ID,@Name,@SomeID OUTPUT 

-- ,etc some other parameter also we can use OutPut parameters like 

-- @SomeID is useful for some other operations for condition checking insertion etc. 

-- If you have any Error in you SP2 then also it will stop executing. 

-- If you want to do any other operation after executing SP2 that we can do here. 

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