为什么我的ELSE法规给我一个错误?

时间:2016-10-21 00:09:59

标签: sql-server-2012

我试图创建存储过程。该过程应该采用两个参数,即发票ID和付款金额。更新该记录以将此付款添加到总计中并将付款日期记录为今天。这是我使用此代码的代码。如果看到任何其他错误,请指出它们。

USE AP;
IF OBJECT_ID ('spRecordPayment') IS NOT NULL
DROP PROC spRecordPayment;
GO

CREATE PROCEDURE spRecordPayment
 @InvoiceID int,
 @PaymentAmount money
AS

BEGIN
SELECT InvoiceId,InvoiceTotal
FROM Invocies
WHERE InvoiceId = @InvoiceID
    IF @PaymentAmount > InvoiceTotal
        DECLARE @CreditTotal MONEY;
        SET @CreditTotal = @PaymentAmount - InvoiceTotal;

        UPDATE Invoices
        SET CreditTotal = @CreditTotal
        WHERE InvoiceID = @InvoiceID;

        UPDATE Invoices
        SET PaymentDate = GETDATE()
    ELSE --This is Line 21

     DECLARE @CreditTotal2 MONEY;
     SET @CreditTotal2 = InvoiceTotal - @PaymentAmount;

     UPDATE Invoices
     SET CreditTotal = @CreditTotal2
     WHERE InvoiceID = @InvoiceID;

     UPDATE Invoices
     SET PaymentDate = GETDATE()
END

它给了我这个错误:

  

Msg 156,Level 15,State 1,Procedure spRecordPayment,Line 21   关键字' ELSE'附近的语法不正确。

2 个答案:

答案 0 :(得分:1)

我相信您的问题是您没有任何if new_beta > beta: 块:

BEGIN...END

答案 1 :(得分:0)

我使用的答案是:

 USE AP;
 IF OBJECT_ID ('spRecordPayment') IS NOT NULL
 DROP PROC spSumInvoices;
 GO

CREATE PROC spRecordPayment 
@InvoiceID int,
@PaymentAmount money
AS

BEGIN
SELECT InvoiceId,InvoiceTotal
FROM Invoices
WHERE InvoiceId = @InvoiceID
IF @PaymentAmount > (SELECT InvoiceTotal From Invoices Where InvoiceId = @InvoiceID)
Begin
        DECLARE @CreditTotal MONEY;
        SET @CreditTotal = @PaymentAmount - (SELECT InvoiceTotal From
    Invoices Where InvoiceId = @InvoiceID);

    UPDATE Invoices
    SET InvoiceTotal = 0
    WHERE InvoiceID = @InvoiceID;

    UPDATE Invoices
    SET PaymentTotal = @PaymentAmount
    WHERE InvoiceID = @InvoiceID;

    UPDATE Invoices
    SET CreditTotal = @CreditTotal
    WHERE InvoiceID = @InvoiceID;

    UPDATE Invoices
    SET PaymentDate = GETDATE()
    WHERE InvoiceID = @InvoiceID;
End
ELSE
Begin
 DECLARE @NewTotal MONEY;
 SET @NewTotal = (SELECT InvoiceTotal From Invoices Where
 InvoiceId            = @InvoiceID) - @PaymentAmount;

    UPDATE Invoices
    SET CreditTotal = 0
    WHERE InvoiceID = @InvoiceID;

    UPDATE Invoices
    SET PaymentDate = GETDATE()
    WHERE InvoiceID = @InvoiceID;

    UPDATE Invoices
    SET InvoiceTotal = @NewTotal
    WHERE InvoiceID = @InvoiceID;
End