我有两张桌子,
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 的人,所以要友善。一如既往,我非常感谢任何帮助。
从您的帖子中,我假设您在
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