Respuesta de procedimiento almacenado (SQL)

Estoy intentando hacer un procedimiento almacenado en SQL para un sistema de ventas de restaurante que al agregar un plato a una venta revise si hay stock disponible de los ingredientes y regrese una respuesta tipo 1 si hay o 0 si no hay.

ALTER proc [dbo].[check_stock_venta] 
@Idplato int,
@Cantidad int,
@Rpta int output
as
i.Stock;t.Cantidad from Insumos i join (select 
dp.id_insumo,Cantidad=sum(dp.Cantidad*@Cantidad) from Detalles_plato dp 
where dp.id_plato=@Idplato group by dp.id_insumo)t on i.Idinsumo=t.id_insumo

Por el momento he hecho un join de las tablas para tener los campos que necesito, había pensado en usar un if con los campos

  • i.Stock
  • t.Cantidad

y que este if devolviera la respuesta si el stock era mayor o igual que la cantidad, no se si sea la mejor forma de hacer esto y por otro lado no se como utilizar estos dos campos luego de hacer el join de las tablas.

Dejo un enlace donde se pueden ver cómo están hechas y relacionadas las tablas.

1
задан 27.12.2016, 01:37
1 ответ

Если есть больше запас, чем количество, необходимое для тарелки, возврати 1, если он не возвратит 0, я надеюсь, что он подает тебя.

Select CASE WHEN i.Stock >= t.Cantidad THEN 1 ELSE 0 END resultado 
from Insumos i join (select dp.id_insumo,Cantidad=sum(dp.Cantidad*@Cantidad) 
from Detalles_plato dp 
where dp.id_plato=@Idplato group by dp.id_insumo)t on i.Idinsumo=t.id_insumo

EDIT:

Мы оставляем себе минимум результат списка ингредиентов, если он возвращает 1, у всех ингредиентов есть запас, а какой-либо возвратил 0 и лишен запас по крайней мере ингредиента.

select MIN(resultado) from (
Select CASE WHEN i.Stock >= t.Cantidad THEN 1 ELSE 0 END resultado 
from Insumos i join (select dp.id_insumo,Cantidad=sum(dp.Cantidad*@Cantidad) 
from Detalles_plato dp 
where dp.id_plato=@Idplato group by dp.id_insumo)t on i.Idinsumo=t.id_insumo
) as tt

Привет,

0
ответ дан 03.12.2019, 17:58
  • 1
    Привет, есть что-то, что debí упоминать в моем post и прошло со мной и дело в том, что у тарелки может быть более одного ингредиента, и я пытаюсь сделать так, чтобы процедура возвратила только ответ и не одну для каждого ингредиента (если он состоит в том, что это возможное) –  27.12.2016, 16:32
  • 2
    Я обновил тебе ответ. –  27.12.2016, 17:29
  • 3
    Большое спасибо из-за твоей помощи –  27.12.2016, 17:53

Эта процедура возвращает стоимость взбираться и проверяет, что у всех ингредиентов был запас. Не darГЎ mГЎs детали.

CREATE PROC dbo.check_stock_venta(
    @Idplato int, 
    @Cantidad int, 
    @Rpta int OUTPUT
)
AS
IF EXISTS(
        SELECT 1
        FROM Insumos AS i 
        WHERE EXISTS( SELECT 1
                    FROM Detalles_plato AS dp 
                    WHERE dp.id_plato = @Idplato 
                    AND i.Idinsumo = dp.id_insumo
                    GROUP BY dp.id_insumo
                    HAVING i.Stock >= sum(dp.Cantidad*@Cantidad))
        )
    SET @Rpta = 1;
ELSE
    SET @Rpta = 0;
0
ответ дан 24.11.2019, 11:51