Чтобы предотвратить добавление дубликата корзины покупок, я пытаюсь изменить свою хранимую процедуру, чтобы использовать 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