这是一个大学课程的项目。
我正在创建一个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
答案 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
。这些是固定点类型,在舍入和比较货币值时更准确。