【问题标题】:SQL trigger to insert value into same row with value from another table on insert or updateSQL触发器在插入或更新时将值插入到与另一个表中的值相同的行中
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2014-02-23
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多