我有一个名为Basket
的表,其中包含复合主键CustID
和ProductID
,还有一个属性Quantity
。 @custID
和@productID
将传递给存储过程。
我需要首先检查这2个参数是否已经作为复合PK存在,如果不是,那么我想通过设置PK参数并将数量增加1来插入整个记录。
如果记录已经存在,那么我只需要将数量列更新为1。
我很难检查并插入粗体文字。 如果有人知道解决方案,请指导我。
答案 0 :(得分:1)
这个怎么样?
CREATE PROCEDURE dbo.DoSomething
@CustID INT, @ProductID INT
AS
BEGIN
-- check if that row already exists
IF EXISTS (SELECT * FROM dbo.Basket
WHERE CustID = @CustID
AND ProductID = @ProductID)
-- if it exists - update "Quantity" by 1
UPDATE dbo.Basket
SET Quantity = Quantity + 1
WHERE CustID = @CustID
AND ProductID = @ProductID)
ELSE
-- if it does not yet exist - create new row
INSERT INTO dbo.Basket(CustomerID, ProductID, Quantity)
VALUES (@CustID, @ProductID, 1)
END
答案 1 :(得分:0)
如果是2008+,你可以使用
MERGE Basket WITH (HOLDLOCK)
USING (VALUES (
@custID,
@productID)) AS Source(CustID, ProductID)
ON Basket.CustID = Source.CustID
AND Basket.ProductID = Source.ProductID
WHEN MATCHED THEN
UPDATE SET Quantity += 1
WHEN NOT MATCHED THEN
INSERT (CustID,
ProductID,
Quantity)
VALUES (CustID,
ProductID,
1);