SQL триггер для вставки значения в ту же строку со значением из другой таблицы при вставке или обновлении

Когда новая запись вставлена ​​в dbo.BOMили когда моя колонка BOM.Site обновлен, я хочу посмотреть BOM.Site значение в dbo.SiteMapи вернуть SiteMap.SiteName значение и вставить его в BOM.SiteMap колонка. Поэтому я подумал, что триггер мог бы пойти, но он не работает. (Если триггер не лучший помощник, пожалуйста, дайте мне знать!) Есть предложения? Заранее спасибо.

Таблицы:

=BOM=
id |  Site    | SiteMap
---+----------+------
 1 |    Mex   | 
 2 |    MXN   | 
 3 |    USA   | 
 4 |    Mex   | 


=SiteMap=
id | SiteName | Sitecode
---+----------+------
 1 | Mexico   | Mex
 2 | Mexico   | MXN
 3 | USA      | USA
 4 | USA      | United States of America 

Желаемый результат:

=BOM=
id |  Site    | SiteMap
---+----------+------
 1 |    Mex   | Mexico
 2 |    MXN   | Mexico
 3 |    USA   | United States of America
 4 |    Mex   | Mexico

Я пробовал пару разных вещей..

CREATE TRIGGER dbo.trMapBom on dbo.BOM
   AFTER INSERT,UPDATE
AS 
BEGIN

    SET NOCOUNT ON;

    IF UPDATE([Site ])
    BEGIN
        UPDATE dbo.BOM
        SET BOM.[Site Map] = 
        (
            SELECT [SiteName]
            from dbo.SiteMap
            where [PlantCode] = [Site ]
        )
    END
END
GO

Еще одна попытка..

CREATE TRIGGER dbo.trMapBom on dbo.BOM
   AFTER INSERT,UPDATE
AS 
BEGIN

    SET NOCOUNT ON;

    UPDATE dbo.BOM set [Site ] = SiteMap.SiteName
    from dbo.BOM
    inner join dbo.SiteMap
    on BOM.[Site ] = SiteMap.PlantCode

END
GO

1 ответ

Вы должны использовать вставленные строки в триггере:

CREATE TRIGGER dbo.trMapBom on dbo.BOM
   AFTER INSERT,UPDATE
AS 
BEGIN

    SET NOCOUNT ON;

    UPDATE b 
    set [SiteMap] = sm.SiteName
    from dbo.BOM b
    inner join dbo.SiteMap sm
    on b.[Site] = sm.SiteCode
    inner join inserted i
    on i.id = b.id

END
GO
Другие вопросы по тегам