SQL存储过程保存SUM并在同一SP内使用它

时间:2017-06-03 14:55:15

标签: sql-server stored-procedures

这是一个大学课程的项目。

我正在创建一个SP,它声明一个浮点数来保存另一个表值的总价格并使用它来插入和更新另一个表,但问题是@total始终为NULL。如果我使用“SELECT ... SUM”并使用我的值在SP外部执行它,它就可以工作!!

CREATE PROC grocery.sp_PagamentoTotalValorVenda
@idVenda INT,
@tipoPagamento INT
AS
    DECLARE @total FLOAT
    DECLARE @idContaCorr INT
    DECLARE @idCliente INT

    SELECT @total=SUM(PROD.PVP)
    FROM grocery.ITEM_VENDA AS IV JOIN grocery.PRODUTO AS PROD ON IV.ID_produto = PROD.ID
    WHERE IV.ID_venda=@idVenda
BEGIN
    SELECT @idContaCorr=CONTCORR.ID,@idCliente=VEN.Nif_cliente
    FROM grocery.VENDA AS VEN JOIN grocery.CONTA_CORRENTE AS CONTCORR ON VEN.Nif_cliente=CONTCORR.Nif_cliente
END
BEGIN
    UPDATE grocery.VENDA
    SET Valor=@total
    WHERE ID=@idVenda
END
IF(@tipoPagamento=3)
BEGIN
    INSERT INTO grocery.PAGAMENTO
    (ID_venda,Valor,ID_conta_corr,ID_tipo_pag)
    VALUES
    (@idVenda,@total,@idContaCorr,@tipoPagamento);
    EXEC grocery.sp_InsertOUTContaCorrente @idContaCorr, @total
END
ELSE
BEGIN
    INSERT INTO grocery.PAGAMENTO
    (ID_venda,Valor,ID_tipo_pag)
    VALUES
    (@idVenda,@total,@tipoPagamento)
END
GO

与此SP相关的所有代码都在PasteBin

1 个答案:

答案 0 :(得分:1)

如上所述,ccy_pair_位置错误:

amount_

注意:业务应用程序几乎不应使用BEGIN。您的数据类型应为CREATE PROC grocery.sp_PagamentoTotalValorVenda ( @idVenda INT, @tipoPagamento INT ) AS BEGIN DECLARE @total FLOAT; DECLARE @idContaCorr INT; DECLARE @idCliente INT; SELECT @total = SUM(PROD.PVP) FROM grocery.ITEM_VENDA AS IV JOIN grocery.PRODUTO AS PROD ON IV.ID_produto = PROD.ID WHERE IV.ID_venda = @idVenda; FLOAT / MONEY。这些是固定点类型,在舍入和比较货币值时更准确。