Проверьте наличие дубликата CartID во время вставки заказа в базу данных SQL Server, используя NOT EXISTS - PullRequest
0 голосов
/ 03 июня 2011

Чтобы предотвратить добавление дубликата корзины покупок, я пытаюсь изменить свою хранимую процедуру, чтобы использовать NOT EXISTS. Я использовал это раньше в утверждении WHERE, но это загадка. Как применить вставку NOT EXISTS к заказам, которая завершает весь процесс, если CartID уже существует.

    ALTER PROCEDURE [dbo].[CreateCustomerOrder] 
    (@CartID char(36),
     @CustomerID uniqueidentifier,
     @ShippingID int,
     @TaxID int)
    AS
    /* Insert a new record into Orders */
    DECLARE @OrderID int
    INSERT INTO Orders (CustomerID, ShippingID, TaxID) 
    VALUES (@CustomerID, @ShippingID, @TaxID)
    /* Save the new Order ID */
    SET @OrderID = @@IDENTITY
    /* Add the order details to OrderDetail */
    INSERT INTO OrderDetail 
         (OrderID, ProductID, ProductName, Quantity, UnitCost)
    SELECT 
         @OrderID, Product.ProductID, Product.Name, 
         ShoppingCart.Quantity, Product.Price
    FROM Product JOIN ShoppingCart
    ON Product.ProductID = ShoppingCart.ProductID
    WHERE ShoppingCart.CartID = @CartID 
    /* Update Product Inventory  */
    UPDATE p  
    SET inventory = p.inventory - b.qty
     FROM product as p, 
       (SELECT productid
              ,sum(quantity) as qty
          FROM shoppingcart 
         WHERE cartid=@CartID
         GROUP BY productid
         ) b  
     WHERE p.productid=b.productid 
    /* Clear the shopping cart */
    DELETE FROM ShoppingCart
    WHERE CartID = @CartID
    /* Return the Order ID */
    SELECT @OrderID

1 Ответ

1 голос
/ 03 июня 2011

Измените вставку на:

INSERT INTO OrderDetail           
    (OrderID, ProductID, ProductName, Quantity, UnitCost)     
SELECT  @OrderID, Product.ProductID, Product.Name,           
                ShoppingCart.Quantity, Product.Price     
    FROM    Product JOIN ShoppingCart     
        ON Product.ProductID = ShoppingCart.ProductID     
 WHERE NOT EXISTS (SELECT 1 FROM ShoppingCart a WHERE  a.CartID = @CartID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...