Je souhaite exécuter une procédure stockée au sein d'une procédure stockée, par exemple.
EXEC SP1
BEGIN
EXEC SP2
END
Mais je veux seulement SP1
pour terminer après SP2
a fini de fonctionner, je dois donc trouver un moyen de SP1
attendre pour SP2
terminer avant SP1
prend fin.
SP2
est exécuté dans le cadre de SP1
donc j'ai quelque chose comme:
CREATE PROCEDURE SP1
AS
BEGIN
EXECUTE SP2
END
T-SQL n'est pas asynchrone, vous n'avez donc 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'
Voici un exemple de l'une de nos procédures stockées qui exécute plusieurs procédures stockées:
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)
Procédure stockée en ligne que nous utilisons selon nos besoins. Exemple comme différent Même paramètre avec des valeurs différentes 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
C’est comme cela que les procédures stockées fonctionnent dans l’ordre, vous n’avez pas besoin de commencer comme ça.
exec dbo.sp1
exec dbo.sp2