que - procedimiento almacenado sql server select
No se puede llamar al procedimiento almacenado dentro del procedimiento almacenado (1)
Ciertamente puede ejecutar múltiples procedimientos desde un solo SP. Incluso puede usar los resultados de 1 SP como parámetros en otro.
En su caso específico, sospecho que hay un error de permisos / seguridad o intercalación que le impide acceder a los procesos B
y C
almacenados.
Aquí hay un ejemplo de encadenamiento SP en el trabajo.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[DerivedProcedures]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Temporary table used to store results from SP1
DECLARE @Results_ForStoredProcedure1 TABLE
(
[SPID] INT,
[Status] NVARCHAR(50),
[Login] NVARCHAR(50),
[HostName] NVARCHAR(50),
[BlkBy] NVARCHAR(5),
[DBName] NVARCHAR(50),
[Commad] NVARCHAR(50),
[CPUTime] INT,
[DiskIO] INT,
[LastBatch] NVARCHAR(50),
[ProgramName] NVARCHAR(50),
[SPID2] INT,
[RequestId] INT
)
-- Execute SP1
INSERT INTO @Results_ForStoredProcedure1
EXEC sp_who2
-- Temporary table to store the results from SP2
DECLARE @Results_ForStoredProcedure2 TABLE
(
[DatabaseName] NVARCHAR(50),
[DatabaseSize] INT,
[Remarks] NVARCHAR(50)
)
-- Execute SP2
INSERT INTO @Results_ForStoredProcedure2
EXEC sp_databases
-- do something with both SP results
SELECT DISTINCT SP2.*
FROM @Results_ForStoredProcedure1 AS SP1
INNER JOIN @Results_ForStoredProcedure2 AS SP2 ON SP2.DatabaseName = SP1.DBName
WHERE SP1.DBName IS NOT NULL
END
GO
-- TEST
EXECUTE [dbo].[DerivedProcedures]
Tengo tres procedimientos almacenados A, B, C
y definición de A es como
StoredProcedure A
As
Begin
--Some Stuff
Exec DBO.B [Derived Conitions]
Exec DBO.C [Derived Conitions]
END
pero cada vez que intenté ejecutar el procedimiento almacenado A, en el tiempo de análisis daba waring;
El módulo ''A'' depende del objeto perdido ''B''. El módulo seguirá siendo creado; sin embargo, no se puede ejecutar con éxito hasta que el objeto exista.
El módulo ''A'' depende del objeto perdido ''C''. El módulo seguirá siendo creado; sin embargo, no se puede ejecutar con éxito hasta que el objeto exista.
En el momento de la ejecución arroja una excepción
No se pudo encontrar el procedimiento almacenado ''dbo.B''.
No se pudo encontrar el procedimiento almacenado ''dbo.C''.
Encontré tantas respuestas para llamar a un procedimiento almacenado en el procedimiento almacenado, pero ninguna de ellas funcionó para mí.