2016-10-21 3 views
0

Ich versuche, eine gespeicherte Prozedur zu erstellen. Die Prozedur sollte zwei Parameter, die Rechnungs-ID und den Betrag der Zahlung. Aktualisieren Sie diesen Datensatz, um diese Zahlung der Gesamtsumme hinzuzufügen, und notieren Sie das Zahlungsdatum wie heute.Dies ist der Code, den ich diesen Code verwende.Wenn andere Fehler angezeigt werden, weisen Sie sie bitte darauf hin.Warum gibt meine ELSE-Anweisung mir einen FEHLER?

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 

Es gibt mir diese Fehlermeldung:

Msg 156, Level 15, State 1, Procedure spRecordPayment, Line 21 Incorrect syntax near the keyword 'ELSE'.

+2

Wollen Sie uns raten, was t Die Fehlermeldung ist, dass Sie bekommen? Meine Kristallkugel ist kaputt ... –

+0

Hey sorry, ich habe bemerkt, dass ich das weggelassen habe @ rory.ap –

Antwort

1

Ich glaube, das Problem ist, dass Sie keine BEGIN...END Blöcke haben:

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

Um hinzuzufügen, nachdem die 'BOOLEAN'-Bedingung überprüft wurde, wird die TSQL-Anweisung oder Anweisungsgruppierung ausgeführt - aber wenn Sie es sind Bei Verwendung einer Anweisungsgruppierung müssen Sie einen Anweisungsblock mit 'BEGIN' und' END' verwenden. Da du, @DanielStallard, mehrere Anweisungen in deiner 'IF/ELSE'-Anweisung hast, musst du' BEGIN/END' verwenden, wie Rory es gesagt hat. – scsimon

+0

Ich habe es herausgefunden Aber danke Für die Hilfe Jungs –

0

Die Antwort, die ich verwendet wurde:

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 
Verwandte Themen