Как добавить данные для запуска с последней вставки - PullRequest
0 голосов
/ 16 мая 2019

Я столкнулся со следующей ситуацией:

enter image description here

Я создал триггер, который реагирует на вставку в третью таблицу. Когда я вставляю какие-либо данные (например, 1 1 2), последнее число должно быть вычтено из столбца Сумма запаса из ячейки, для которого необходимо ID Product (как показано на рисунке). Но как понять, какая строка была добавлена ​​последней? Сначала я подумал сделать это с помощью select, но это кажется невозможным. И теперь я думаю, что это можно сделать с помощью курсора, но это не самый лучший вариант. Есть ли лучший вариант, как я могу это сделать?

Вот мой код триггера, но он, к сожалению, только вычитает 1 из 1-го продукта каждый раз:

CREATE TRIGGER AmountInsert ON Amount
AFTER INSERT
AS
BEGIN
    UPDATE Product
    SET Amount_On_Stock =
     (SELECT Amount_On_Stock FROM Product
    WHERE ID_Product = 1) - 1
    WHERE ID_Product = 1
END

1 Ответ

1 голос
/ 16 мая 2019

Первое, что вам нужно понять, это то, что в триггере в SQL Server вам предоставляется псевдотаблица inserted и псевдотаблица deleted .Эти таблицы используются для определения того, какие изменения произошли.

Я думаю, что следующий триггер выполняет то, что вы ищете - комментарии объясняют логику.

CREATE TRIGGER dbo.AmountInsert ON dbo.Amount
AFTER INSERT
AS
BEGIN
  set nocount on;

  update P set
    -- Adjust the stock level by the amount of the latest insert
    Amount_On_Stock = coalesce(Amount_On_Stock) - I.Amount
  from dbo.Product P
  inner join (
    -- We need to group by ID_Product in case the same product appears in the insert multiple times
    select ID_Product, sum(Amount) Amount
    from Inserted
    group by ID_Product
    -- No need to update is net change is zero
    having sum(Amount) <> 0
  ) I
  on I.ID_Product = P.ID_Product;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...