Holas a todos.
Mientras programaba un procedimiento almacenado, intenté obtener los datos de otro procedimiento, como lo he venido haciendo desde que descubrí tamaña maravilla de la programación sql.
Pero hoy me topé con este extraño error: La instrucción INSERT EXEC no se puede anidar.
Tras investigar por algunos lados, di con la respuesta: no se puede almacenar en una tabla temporal de procedimiento almacenado, el resultado de otro procedimiento que también esté realizando una inserción de este tipo.
Esto es algo como tener:
Esto significará que si ejecuto:
...SQL me arrojará el error antes mencionado.
La solución al problema es no llamar a un procedimiento que esté llamando a otro ya en su interior. En algunos lados leí que transformaban el procedimiento intermedio (en el ejemplo, "miProcedimiento"), en una función que retorne un dato tipo TABLE. Pero esto no lo he probado, así que no sé si cambiaría las cosas.
Bueno, esop. Saludos!
Info:
• Guardar el resultado de un procedimiento almacenado en una tabla
• Problems with INSERT from stored procedure
Mientras programaba un procedimiento almacenado, intenté obtener los datos de otro procedimiento, como lo he venido haciendo desde que descubrí tamaña maravilla de la programación sql.
Pero hoy me topé con este extraño error: La instrucción INSERT EXEC no se puede anidar.
Tras investigar por algunos lados, di con la respuesta: no se puede almacenar en una tabla temporal de procedimiento almacenado, el resultado de otro procedimiento que también esté realizando una inserción de este tipo.
Esto es algo como tener:
CREATE PROCEDURE miProcedimiento
AS
INSERT INTO #tablita EXEC otroProcedimiento;
SELECT * FROM #tablita;
END;
CREATE PROCEDURE nuevoProcedimiento
AS
INSERT INTO #tabla1 EXEC miProcedimiento;
END;
AS
INSERT INTO #tablita EXEC otroProcedimiento;
SELECT * FROM #tablita;
END;
CREATE PROCEDURE nuevoProcedimiento
AS
INSERT INTO #tabla1 EXEC miProcedimiento;
END;
Esto significará que si ejecuto:
EXEC nuevoProcedimiento;
...SQL me arrojará el error antes mencionado.
La solución al problema es no llamar a un procedimiento que esté llamando a otro ya en su interior. En algunos lados leí que transformaban el procedimiento intermedio (en el ejemplo, "miProcedimiento"), en una función que retorne un dato tipo TABLE. Pero esto no lo he probado, así que no sé si cambiaría las cosas.
Bueno, esop. Saludos!
Info:
• Guardar el resultado de un procedimiento almacenado en una tabla
• Problems with INSERT from stored procedure
Comentarios
Me tocó mover el procedimiento para que no pase esto
Igual te recuerdo que esta entrada la escribi hace 10 años, y puede que el error ya haya sido solucionado en versiones posteriores de los motores de BD...