2015-04-19 3 views
-1

У меня есть таблица с именем Basket, которая имеет составной первичный ключ CustID и ProductID, с еще 1 атрибутом Quantity. @custID и @productID передаются в хранимую процедуру.Проверка составного первичного элемента существует или нет?

мне нужно сначала проверить, существует ли уже эти 2 параметра в качестве составного ПК или нет, если нет, то я хочу, чтобы вставить всю запись, установив ПК с параметрами и увеличить количество на 1.

Если запись уже существует, тогда мне просто нужно обновить количество столбцов на 1.

У меня трудное время для проверки и вставки жирного текста. Если кто-то знает, пожалуйста, любезно посоветуйте мне.

+0

Какая версия SQL Server? –

ответ

0

Как об этом ??

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 
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); 
Смежные вопросы