2008-10-04 4 views
37

Я хотел бы выполнить хранимую процедуру в хранимой процедуре, например.Выполнение хранимой процедуры в хранимой процедуре

EXEC SP1 

BEGIN 

EXEC SP2 
END 

Но я хочу только SP1 закончить после того, как SP2 закончит работу, поэтому мне нужно найти способ SP1 ждать SP2 закончить до SP1 концов.

SP2 в настоящее время выполняются как часть SP1 поэтому у меня есть что-то вроде:

CREATE PROCEDURE SP1 
AS 
BEGIN 

EXECUTE SP2 

END 
+0

тегов подправили - «сервер» вызвали некоторые ложные срабатывания – finnw 2008-10-04 13:55:03

+0

Привета, retagged. Мы рационализируем теги mssql и sqlserver. – ConcernedOfTunbridgeWells 2008-10-08 15:16:54

+2

Похоже, этот вопрос [дубликат] (http://stackoverflow.com/questions/170440/stored-procedure-not-being-executed-within-another-stored-procedure). Пожалуйста, задайте свой вопрос один раз. – Rick 2008-10-13 01:02:34

ответ

3

Thats как это работает хранимые процедуры выполняются в порядке, вам не нужно начинать только что-то вроде

exec dbo.sp1 
exec dbo.sp2 
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

T-SQL не является асинхронным, поэтому у вас действительно нет выбора, кроме как дождаться окончания SP2. К счастью, это то, что вы хотите.

CREATE PROCEDURE SP1 AS 
    EXEC SP2 
    PRINT 'Done' 
1

Привет, Я обнаружил, что моя проблема в том, что SP2 не выполняется из SP1 при выполнении 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 
1

Ваш SP2, вероятно, не работает из-за какой-то неудачи в начале кода SP1 так EXEC SP2 не будет достигнуто.

Пожалуйста, разместите свой код целиком.

9

Inline Хранимая процедура, используемая нами в соответствии с нашей потребностью. Пример как иной тот же параметр с разными значениями, которые мы должны использовать в запросах ..

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 
Смежные вопросы