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