#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, и это сработало. Еще раз спасибо