2011-02-02 20 views
5

¿Es posible utilizar los resultados de un procedimiento almacenado en otro procedimiento almacenado?Usar resultados de procedimiento almacenados anidados en el procedimiento almacenado de llamadas Sql Server 2008

I.e.

CREATE PROCEDURE [dbo].[Proc1] 
     @ID INT, 
     @mfgID INT, 
     @DealerID INT 

AS 
BEGIN 

    DECLARE @Proc1Result UserDefinedTableVariable 

    EXEC @Proc1Result = Proc2 
     @SomeID = @ID, 
     @SomeID2 = @mfgID, 
     @SomeID3 = @DealerID 

    -- Now I want to use the table returned by the stored procedure here. 
    SELECT [col1],[col2] FROM @Proc1Result 

END 

He intentado utilizar INSERT INTO @Proc1Result EXEC Proc2 (with parameters passed), pero INSERT EXEC no puede ser llamado en una declaración anidada.

¿Hay alguna forma de lograr esto? El entorno es SQL Server 2008.

Respuesta

9

Puede anidar procedimientos almacenados up to 32 levels.

Recomendaría leer más de this article respecto a INSERT-EXEC. Aquí es un snippit:

Si some_sp intenta llamar some_other_sp con INSERT-EXEC, recibirá un mensaje de error . Por lo tanto, solo puede tener un INSERT-EXEC activo a la vez. Esta es una restricción en SQL Server.

5

Tienes razón, INSERT ... EXEC no se puede anidar. Desde How to Share Data Between Stored Procedures.

No puede anidar. Si some_sp intenta llame al some_other_sp con INSERT-EXEC, , aparecerá un mensaje de error. Por lo tanto, solo puede tener un INSERT-EXEC activo a la vez. Esta es una restricción en SQL Server.

Tienes que encontrar otra forma. El artículo de Erland vinculado atraviesa prácticamente todas las opciones que tiene y las discute con gran detalle.

+0

¿Cómo es que publiqué exactamente el mismo enlace y cito 2 minutos antes pero tienes más votos? Debe ser el osito de peluche ... –

+1

@Abe: la mía ha formateado los nombres de los procedimientos, eso lleva horas y horas de trabajo y los votantes aprecian el esfuerzo extra;) –

+1

Remus también cita una porción más grande de la fuente, que indudablemente debe proporcionar el OP con más contexto sobre el tema. :) –

1

Una sintaxis para conseguir resultados en una sola sp de otro es:

INSERT INTO [myTable] 
EXEC Proc1 [param1], [param2], [param3], etc. 

Pero hay que crear la primera tabla que se inserta en y los nombres de campo y tipos tienen que coincidir exactamente.

+0

por favor lea las otras 2 respuestas – RichardTheKiwi

+0

Las otras dos respuestas ni siquiera son consistentes. (Por cierto, puedes anidarlos.) Realmente no veo dónde dice el OP que está anidándolos más de una vez, pero quizás no estoy entendiendo correctamente. –

Cuestiones relacionadas