Hola a todos,
en primer lugar quiero aclarar que probablemente esté preguntando
algo muy tonto pero... preguntando se aprende.
Tengo este procedimiento almacenado:
ALTER PROCEDURE Ingredients
@Pro_Id INT
AS
BEGIN
SET NOCOUNT ON;
WITH Ingredients (ING_NAME,ING_PRO_ID,ING_QUANTITY,ING_TYPE,ING_UNIT,
ING_LEVEL)
AS
(SELECT PRO_DESCRIPTION, PRO_ID,cast(0 as
decimal(18,3)),'R',PRO_DEFAULTUNIT, 1 FROM MCS_PRODUCTS WHERE
PRO_RECIPE = 'Y' AND PRO_ID = @Pro_Id
UNION ALL
SELECT PRO_DESCRIPTION, REC_PRO_ID, REC_QUANTITY_1, (case when
PRO_RECIPE = 'Y' THEN 'R' ELSE 'P' END ),REC_UNIT,
Ingredients.ING_LEVEL + 1
FROM MCS_RECIPES , Ingredients, MCS_PRODUCTS
WHERE MCS_RECIPES.REC_PARENT_ID = Ingredients.ING_PRO_ID AND
MCS_Recipes.REC_PRO_ID = MCS_Products.PRO_ID)
SELECT space((Ingredients.ING_LEVEL-1) * 5) + Ingredients.ING_NAME,
* FROM Ingredients WHERE Ingredients.ING_PRO_ID <> @Pro_Id
END
GO
Lo que hace es listar los ingredientes de una receta, la tabla
principal es MCS_Products (tanto para productos como para recetas) y
una tabla relacionada MCS_Recipes que guarda los ingredientes de una
receta.
El procedimiento almacenado funciona bien, me lista todos los
componentes de una receta, hasta ahí, todos contentos.
Ahora tengo una tabla de Pedidos donde cada línea es un producto.
Dado que un producto puede ser una receta, necesito "abrirlo" y mostrar
todos los componentes. Un ejemplo será más claro.
SELECT * FROM MCS_OrderLines WHERE ol_ord_id = 612
Eso me listará todos los productos/recetas que tiene esa orden pero,
como expliqué antes, si uno de esos productos es una receta, necesito
mostrar los componentes.
Acá la pregunta ridícula: existe alguna forma de usar el
procedimiento almacenado en la consulta? O pasar el resultado de la
select anterior (solo el campo OL_PRO_ID) como parámetro al
procedimiento almacenado?
Muchas gracias por leerme :)
Saludos.
Mauricio
Copenhague, Dinamarca
Leer las respuestas