42 votes

Exécution d'une procédure stockée dans une procédure stockée

Je voudrais exécuter une procédure stockée dans une procédure stockée, par exemple

 EXEC SP1

BEGIN

EXEC SP2
END
 

Mais je veux seulement que SP1 se termine après que SP2 ait fini de fonctionner, j'ai donc besoin de trouver un moyen pour SP1 d'attendre SP2 de terminer avant que SP1 se termine.

SP2 est en cours d'exécution dans le cadre de SP1 , j'ai donc quelque chose comme:

 CREATE PROCEDURE SP1
AS
BEGIN

EXECUTE SP2

END
 

34voto

Mark Brackett Points 46824

T-SQL n'est pas asynchrone, vous n'avez donc vraiment pas d'autre choix que d'attendre la fin du SP2. Heureusement, c'est ce que vous voulez.

 CREATE PROCEDURE SP1 AS
   EXEC SP2
   PRINT 'Done'
 

15voto

mattruma Points 7742

Voici un exemple de l'une de nos procédures stockées qui exécute plusieurs procédures stockées en son sein:

 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)
 

11voto

Jom George Points 609

Procédure stockée en ligne que nous utilisons selon nos besoins. Exemple comme différent Même paramètre avec différentes valeurs que nous devons utiliser dans les requêtes ..

 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
 

3voto

PeteT Points 5277

C'est comme ça que les procédures stockées fonctionnent dans l'ordre, vous n'avez pas besoin de commencer juste quelque chose comme

 exec dbo.sp1
exec dbo.sp2
 

1voto

test Points 617

Salut, j'ai trouvé que mon problème est que SP2 ne s'exécute pas à partir de SP1 lorsque SP1 est exécuté.

Voici la structure de 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X