【发布时间】:2016-08-13 21:58:32
【问题描述】:
当在dbo.BOM 中插入新记录时,或者当我的列BOM.Site 更新时,我想在dbo.SiteMap 中查找BOM.Site 值,并带回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
【问题讨论】:
-
我没有在您提供的表结构中看到
PlantCode列。是错字还是什么?如果是,那么应该有来自SiteMap表的Sitecode列。顺便说一句,无需为此要求触发。您可以在存储过程中实现它(如果它在您的应用程序中)。还有一个问题-假设当您将新记录插入BOM表时,其相关的SiteCode总是存在于SiteMap表中?先确认一下。如果SiteMap表中不存在其相关记录怎么办?
标签: sql-server triggers lookup-tables