ストアドプロシージャ内でストアドプロシージャを実行したいのですが、たとえば
EXEC SP1
BEGIN
EXEC SP2
END
しかし、私は実行が終了SP1
した後にのみ終了したいので、終了する前に終了するのを待つSP2
方法を見つける必要があります。SP1
SP2
SP1
SP2
の一部として実行されているので、次のSP1
ようなものがあります。
CREATE PROCEDURE SP1
AS
BEGIN
EXECUTE SP2
END
ストアドプロシージャ内でストアドプロシージャを実行したいのですが、たとえば
EXEC SP1
BEGIN
EXEC SP2
END
しかし、私は実行が終了SP1
した後にのみ終了したいので、終了する前に終了するのを待つSP2
方法を見つける必要があります。SP1
SP2
SP1
SP2
の一部として実行されているので、次のSP1
ようなものがあります。
CREATE PROCEDURE SP1
AS
BEGIN
EXECUTE SP2
END
T-SQLは非同期ではないため、SP2が終了するまで待つしかありません。幸いなことに、それはあなたが望むものです。
CREATE PROCEDURE SP1 AS
EXEC SP2
PRINT 'Done'
以下は、その中の複数のストアドプロシージャを実行するストアドプロシージャの1つの例です。
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)
必要に応じて使用するインライン ストアド プロシージャ。クエリで使用する必要がある異なる値を持つ異なる同じパラメーターのような例..
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
それがどのように機能するかストアドプロシージャは順番に実行されます。次のようなことを始める必要はありません。
exec dbo.sp1
exec dbo.sp2