Ich habe diese gespeicherte Prozedur geschrieben, um Elemente in eine Tabelle mit dem Namen InvoiceLineItems
hinzuzufügen. Die Datenbank verfügt über einige Testeinträge, und diese Prozedur basiert auf anderen eingefügten gespeicherten Prozeduren, die funktionieren.Gespeicherte SQL Server-Prozedur für Insert-Läufe, aber keine Werte in die Tabelle einfügen
Aus irgendeinem Grund wird die Abfrage erfolgreich ausgeführt, aber die Werte werden nicht tatsächlich in die Tabelle eingefügt, und ich kann nicht herausfinden, warum, vor allem, da die anderen Einfügeverfahren funktioniert haben.
-Code, die erfolgreich Werte in eine Tabelle einfügt:
IF OBJECT_ID('sp_InsertInvoices') IS NOT NULL
DROP PROC sp_InsertInvoices;
GO
CREATE PROC sp_InsertInvoices
@CustomerID INT = NULL,
@TotalDue MONEY = NULL,
@Paid CHAR(3) = NULL
AS
BEGIN
IF @CustomerID IS NULL
THROW 50001, 'CustomerID cannot be null.', 1;
IF @TotalDue IS NULL
THROW 50001, 'TotalDue cannot be Null.', 1;
IF @TotalDue < 0
THROW 50001, 'TotalDue cannot be negative.', 1;
IF @Paid IS NULL
THROW 50001, 'Must specify if the balance is paid or not.', 1;
ELSE --All data is validated
INSERT INTO Invoices (CustomerID, TotalDue, Paid)
VALUES (@CustomerID, @TotalDue, @Paid)
END
GO
Der Code, der keine Werte einfügen:
IF OBJECT_ID('sp_InsertInvoiceLineitems') IS NOT NULL
DROP PROC sp_InsertInvoiceLineitems;
GO
CREATE PROC sp_InsertInvoiceLineitems
@InvoiceID INT = NULL,
@ProductID INT = NULL,
@PQty TINYINT = NULL,
@ListPrice MONEY = NULL,
@ServiceID INT = NULL,
@ServiceCost MONEY = NULL,
@SQty TINYINT = NULL,
@TotalAmount MONEY = NULL
AS
BEGIN
IF @InvoiceID IS NULL
THROW 50001, 'Must enter an InvoiceID.', 1;
IF @ProductID IS NOT NULL AND @ProductID NOT IN (SELECT ProductID FROM Products)
THROW 50001, 'Please enter a valid ProductID.', 1;
IF @PQty IS NOT NULL AND @ProductID IS NOT NULL AND @PQty <= 0
THROW 50001, 'PQty must be greater than zero.', 1;
IF @ProductID IS NOT NULL
SET @ListPrice = (SELECT ListPrice FROM Products WHERE ProductID = @ProductID);
IF @ServiceID IS NOT NULL AND @ServiceID NOT IN (SELECT ServiceID FROM Services)
THROW 50001, 'Please enter a valid ServiceID.', 1;
IF @ServiceID IS NOT NULL
SET @ServiceCost = (SELECT ServiceCost FROM Services WHERE ServiceID = @ServiceID);
IF @SQty IS NOT NULL AND @ServiceID IS NOT NULL AND @Sqty <= 0
THROW 50001, 'SQty must be greater than zero.', 1;
IF @ProductID IS NOT NULL OR @ServiceID IS NOT NULL
SET @TotalAmount = ((@ListPrice*@PQty) + (@ServiceCost*@SQty));
ELSE --All data is verified
INSERT INTO InvoiceLineItems (InvoiceID, ProductID, PQty, ListPrice, ServiceID, ServiceCost, SQty, TotalAmount)
VALUES (@InvoiceID, @ProductID, @PQty, @ListPrice, @ServiceID, @ServiceCost, @SQty, @TotalAmount);
END
GO
Irgendwelche Gedanken darüber, warum sie nicht die Werte einfügen?
Können Sie bitte Ihren Code formatieren? Dies ist grenzwertig nicht lesbar. –
Entschuldigung, dies ist das erste Mal, dass ich diese Seite nutze. Wie würde ich es formatieren? Wenn ich es öffne, sieht es richtig aus, so unsicher, was ich tun soll. – BriMead