procedimientos - procedimiento almacenado sql server ejemplo
Ejecutar un procedimiento almacenado dentro de un procedimiento almacenado (6)
Me gustaría ejecutar un procedimiento almacenado dentro de un procedimiento almacenado, por ejemplo
EXEC SP1
BEGIN
EXEC SP2
END
Pero solo quiero que el SP1
termine después de que el SP2
haya terminado de ejecutarse, así que necesito encontrar una manera para que el SP1
espere a que el SP2
termine antes de que termine el SP1
.
SP2
se está ejecutando como parte de SP1
así que tengo algo como:
CREATE PROCEDURE SP1
AS
BEGIN
EXECUTE SP2
END
Aquí hay un ejemplo de uno de nuestros procedimientos almacenados que ejecuta múltiples procedimientos almacenados dentro de él:
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)
Así es como funciona, los procedimientos almacenados se ejecutan en orden, no es necesario comenzar algo así como
exec dbo.sp1
exec dbo.sp2
Es probable que su SP2 no se esté ejecutando debido a algún error en el código inicial en SP1, por lo que EXEC SP2 no se alcanza.
Por favor, publique todo su código.
Hola, he encontrado que mi problema es que SP2 no se ejecuta desde SP1 cuando se ejecuta SP1.
A continuación se muestra la estructura 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
Procedimiento almacenado en línea que usamos según nuestra necesidad. Ejemplo similar Diferente parámetro con diferentes valores que debemos usar en las consultas.
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
T-SQL no es asíncrono, por lo que realmente no tiene más remedio que esperar hasta que finalice el SP2. Afortunadamente, eso es lo que quieres.
CREATE PROCEDURE SP1 AS
EXEC SP2
PRINT ''Done''