Как вставить товар в корзину покупок в новой строке, если существует, но цвет и размер отличаются в Asp.net ?

#asp.net #sql #stored-procedures

#asp.net #sql #хранимые процедуры

Вопрос:

У меня есть хранимая процедура, которая добавляет товар в корзину покупок. Но если товар существует в корзине покупок, и я выбираю тот же товар, но на этот раз я также выбираю другой размер или цвет, я хочу добавить новую строку в корзину покупок, а не обновлять существующую строку идентификатором корзины. Вот SP:

     ALTER PROCEDURE [dbo].[ShoppingCartAddItem]
(@CartId char(36),
 @ProductId int,
 @Attributes nvarchar(1000))
AS
If Exists(Select CartId From ShoppingCart
Where ProductId = @ProductId and CartId = @CartId AND Attributes = @Attributes)
Insert Into ShoppingCart (CartId, ProductId, Attributes, Quantity, DateAdded)
Values (@CartId, @ProductId, @Attributes, 1, GETDATE())
Else
If Exists(Select CartId from ShoppingCart Where ProductId = @ProductId And CartId = @CartId)
UPDATE ShoppingCart
Set Quantity = Quantity   1
WHere ProductId = @ProductId And CartId = @CartId
Else
If Exists(Select ProductName From Products Where ProductId = @ProductId)
Insert Into ShoppingCart (CartId, ProductId, Attributes, Quantity, DateAdded)
Values (@CartId, @ProductId, @Attributes, 1, GETDATE())
  

У кого-нибудь есть идеи о том, как это исправить.
Спасибо

Ответ №1:

Вы говорите, что в одной корзине может быть только один экземпляр данного товара. Вам также нужно будет добавить проверку для атрибутов. Если атрибуты являются количеством обновления, в противном случае вставьте новую запись.

 If Exists(Select CartId From ShoppingCart Where ProductId = @ProductId and CartId = @CartId AND Attributes = @Attributes)
  BEGIN
     UPDATE ShoppingCart Set Quantity = Quantity   1 
       WHere ProductId = @ProductId And CartId = @CartId  AND Attributes = @Attributes
  END
Else   
  BEGIN  
      Insert Into ShoppingCart (CartId, ProductId, Attributes, Quantity, DateAdded) Values (@CartId, @ProductId, @Attributes, 1, GETDATE()) 
  END
  

Комментарии:

1. Спасибо, Чад, я не говорю, что в корзине должен быть один экземпляр данного товара. Например, если товар (например, рубашка, цвет: синий, размер: L) находится в корзине, а затем я выбираю тот же товар, но другого размера и цвета, на этот раз я хочу добавить в корзину новый экземпляр того же товара. Но если товар имеет те же атрибуты, я хочу обновить только количество.

2. Я полагаю, что это то, что делает приведенный выше код. Я имел в виду, что в вашем коде вы говорили, что … извините за путаницу.

3. К сожалению, код работает не так, как указано, он не добавляет товар в корзину, даже не обновляет текущее количество товара, если товар находится в корзине.

4. На самом деле это обновляет текущее количество товара, но не добавляет новый экземпляр, если у товара разные атрибуты. Извините за приведенное выше утверждение.

5. Добавлены некоторые начала и окончания, которые, возможно, привели к путанице в проблеме

Ответ №2:

 ALTER PROCEDURE [dbo].[ShoppingCartAddItem]
(@CartId char(36),
 @ProductId int,
 @Attributes nvarchar(1000))
AS
If Exists(Select CartId from ShoppingCart Where ProductId = @ProductId And CartId = @CartId AND Attributes = @Attributes)
    UPDATE ShoppingCart
    Set Quantity = Quantity   1
    Where ProductId = @ProductId And CartId = @CartId AND Attributes = @Attributes
Else
    Insert Into ShoppingCart (CartId, ProductId, Attributes, Quantity, DateAdded)
    Values (@CartId, @ProductId, @Attributes, 1, GETDATE())
  

Комментарии:

1. Если товар находится в корзине, и я выбираю тот же товар с теми же атрибутами, он работает и обновляет количество, но когда я выбираю разные атрибуты для одного и того же товара, он не добавляет товар в корзину (как новый экземпляр).

2. Спасибо за информацию, приведенный выше SP был полностью правильным, но, похоже, у меня возникли некоторые ошибки в коде при вставке, потому что я попробовал из Sql Management Studio, и это сработало. Еще раз спасибо