检查复合主要是否存在?

时间:2015-04-19 10:16:58

标签: sql-server

我有一个名为Basket的表,其中包含复合主键CustIDProductID,还有一个属性Quantity@custID@productID将传递给存储过程。

我需要首先检查这2个参数是否已经作为复合PK存在,如果不是,那么我想通过设置PK参数并将数量增加1来插入整个记录。

如果记录已经存在,那么我只需要将数量列更新为1。

我很难检查并插入粗体文字。 如果有人知道解决方案,请指导我。

2 个答案:

答案 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);