两个表之间更新触发后的SQL

问题描述 投票:0回答:1

我有两张桌子,

Engineering
Electrical
。工作在
Engineering
表中完成,然后
Electrical
团队开始工作。他们共享一些相同的列。这些列是

Tag
Service Description
Horsepower
RPM
Project Number

我想创建一个更新后触发器,以便当

Tag
列填充到
Electrical
表中并且该数据与
Tag
表中
Engineering
列之一中的数据匹配时,其他四个相同
Engineering
表中的列会自动发送到
Electrical
表中的相应列。

以下是我尝试过的方法,显然不起作用:

CREATE TRIGGER [dbo].[tr_Electrial_Update] 
ON [dbo].[ENGINEERING] 
AFTER UPDATE
AS
BEGIN
    INSERT INTO ELECTRICAL ([ICM_SERVICE_DESCRIPTION_],[PROJECT_NUMBER_], [ICM_POWER_HP_], [ICM_POWER_KW_], [ICM_RPM_])
        SELECT 
            i.[ICM_SERVICE_DESCRIPTION_], i.[PROJECT_NUMBER_],
            i.[ICM_POWER_HP_], i.[ICM_POWER_KW_], i.[ICM_RPM_]
        FROM 
            ENGINEERING m
        JOIN 
            inserted i ON i.[TAG_] = m.[TAG_]    
END

我是一个试图自学 SQL 的人,所以要友善。一如既往,我非常感谢任何帮助。

sql sql-server triggers
1个回答
0
投票

从您的帖子中,我假设您在

Electrical
表中已经有一个条目,并且它的
Tag
列从
NULL
更新为其他值。此语法适用于 SQL Server - 您没有明确指定您正在使用的 RDBMS,但对我来说它看起来像 SQL Server。如果不是 - 根据需要进行调整。

假设

Engineering
中只有一行与
Tag
值匹配,您可以执行类似的操作 - 它必须是
UPDATE
语句,因为您在
Electrical
中已经有一行 - 您想要更新某些列,而不是插入全新的行:

CREATE TRIGGER [dbo].[tr_Electrical_Update] 
ON [dbo].Electrical 
AFTER UPDATE
AS
BEGIN
    IF UPDATE(Tag)
        UPDATE dbo.Electrical 
        SET [ICM_SERVICE_DESCRIPTION_] = eng.[ICM_SERVICE_DESCRIPTION_],
            [PROJECT_NUMBER_] = eng.[PROJECT_NUMBER_],
            [ICM_POWER_HP_] = eng.[ICM_POWER_HP_], 
            [ICM_POWER_KW_] = eng.[ICM_POWER_KW_], 
            [ICM_RPM_] = eng.[ICM_RPM_]
        FROM Inserted i
        INNER JOIN dbo.Engineering eng ON i.Tag = eng.Tag 
        WHERE Electrical.Tag = i.Tag;
END
© www.soinside.com 2019 - 2024. All rights reserved.