2016-10-21 15 views
0

ストアドプロシージャを作成しようとしています。プロシージャには、請求書IDと支払い金額の2つのパラメータが必要です。そのレコードを更新して、この支払いを合計額に追加し、今日の支払い日を記録します。これは私がこのコードを使用しているコードです。他のエラーが見られる場合は、それらを指摘してください。私のELSE Statmentが私にエラーを与えているのはなぜですか?

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 Incorrect syntax near the keyword 'ELSE'.

+2

あなたは私たちに何を推測させるでしょうか?彼のエラーメッセージはあなたが得ていることですか?私のクリスタルボールが壊れています... –

+0

ごめんなさい、残念です。@ rory.ap –

答えて

1

私はあなたの問題はあなたがどんなBEGIN...ENDブロックを持っていないことであると考えている:

IF (...) 
    BEGIN 
    .... 
    END 
ELSE 
    BEGIN 
    .... 
    END 
+0

これに加えて、 'BOOLEAN'条件がチェックされた後、TSQL文や文のグループ化が実行されます。ステートメントグループを使用して、 'BEGIN'と' END'でステートメントブロックを使用する必要があります。 @DanielStallardはあなたの 'IF/ELSE'ステートメントに複数のステートメントを持っているので... Roryが述べたように' BEGIN/END'を使う必要があります。 – scsimon

+0

私はそれを把握したが、ありがとう助けの人のために –

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 
関連する問題