Триггеры

Здравствуйте! Помогите разобраться с созданием триггеров MS SQL Server. Есть вот такое задание:

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

create trigger tg_check_product_availability on Goods
after insert as
begin
update Goods
set QuantityInStock=g.QuantityInStock+i.QuantityInStock
from Goods g join inserted i on g.Id=i.Id
where g.Name like i.Name and g.Kind like i.Kind and g.Brand like i.Brand
and g.CostPrice like i.CostPrice and g.Price like i.Price
end

Данные не добавляются и выскакивает ошибка

какая?

Если я добавляю новую позицию, то все норм. А при добавлении существующей выскакивает:

Msg 2627, Level 14, State 1, Line 18
Violation of UNIQUE KEY constraint ‘UQ__Goods__BAB741D7FA60D5B9’. Cannot insert duplicate key in object ‘dbo.Goods’. The duplicate key value is (Nike).

А мне нужно, чтобы просто обновилось количество

Тут тоже не совсем норм, добавляю 5, а получаю в итоге 10

Кажется я нашел ошибку, нужно убрать уникальность. Но триггер все равно неправильный

триггером AFTER для сиквела не получится, Insert or Update в нем тоже нет, так что хранимка. Или триггер INSTEAD OF

В том то и дело, что, если я сделаю INSTEAD OF, то я не смогу добавить вообще ничего. А нужно всего лишь обновлять количество и нужен именно триггер. Как быть?

Я конечно извиняюсь за то что скажу своего мнения… Зачем здесь триггер если при выборе -SELECT-можно проверять “количество товара” и в общем “существование” этого товара. Вот на данный момент я не вижу преимущества использования триггеров…

Так сказано в задании

CREATE TABLE MyTempTable (a int NOT NULL, b int NOT NULL)

CREATE TRIGGER InsteadOfInsertForMyTempTable on MyTempTable INSTEAD OF INSERT AS
BEGIN
  UPDATE MyTempTable SET b = m.b + i.b
    FROM MyTempTable m, Inserted i
    WHERE m.a = i.a
  INSERT INTO MyTempTable
    SELECT i.a,i.b
      FROM Inserted i LEFT JOIN MyTempTable m ON m.a=i.a
      WHERE m.a IS NULL
END

INSERT INTO MyTempTable VALUES(1,10)
INSERT INTO MyTempTable VALUES(2,15)

SELECT * FROM MyTempTable

1 10
2 15

 INSERT INTO MyTempTable VALUES(2,3)
 INSERT INTO MyTempTable VALUES(3,4)
 
 SELECT * FROM MyTempTable

1 10
2 18
3 4

1 лайк

Спасибо, разобрался