Сервер Sql: обновить новую запись при вставке

Использование образца «Борей»:

Я хотел бы создать триггер вставки в таблицу OrderDetails, чтобы каждый раз, когда вставляется OrderDetail, он получал текущее значение UnitCost, как определено в таблице Products.

Это должно быть что-то вроде этого, но у меня проблемы с тем, чтобы сделать это правильно. Вы можете помочь ?

CREATE TRIGGER Trigger1
ON OrderDetails as od
FOR INSERT
AS
    -- save unit cost
    od.unitCost = (select UnitCost from Products as p 
                        WHERE p.ProductId = i.ProductId )

Я использую SQL Server 2008. Спасибо!


person Patrick Honorez    schedule 04.09.2009    source источник


Ответы (1)


Вам нужно будет присоединиться к таблице inserted. в таблицу orderdetails, чтобы узнать, что было вставлено. Вот так:

CREATE TRIGGER Trigger1
ON OrderDetails as od
FOR INSERT
AS
BEGIN

    update od
    set unitcost = p.unitcost
    from 
        orderdetails od
        inner join inserted i on
            od.orderlineid = i.orderlineid
        inner join produts p on
            p.productid = od.productid

END
person Eric    schedule 04.09.2009
comment
Спасибо, Эрик, за хороший и быстрый ответ. - person Patrick Honorez; 04.09.2009
comment
Просто примечание для других: Sql Server, похоже, не нравится FOR AFTER INSERT. Но FOR INSERT делает свою работу. - person Patrick Honorez; 04.09.2009
comment
@iDevlop: Хороший звонок. Я отвечал на слишком много триггерных вопросов MySQL :) - person Eric; 04.09.2009
comment
И если я хочу добавить условие для выполнения обновления только тогда, когда вставленная запись имеет NULL в удельной стоимости, где я могу поместить это условие? Я пробовал несколько вещей, в том числе WHERE i.productId IS NULL перед последним END, но это, похоже, не работает. - person Patrick Honorez; 04.09.2009