gpt4 book ai didi

sql - 如何编写更新触发器以根据 SQL Server 2008 中另一个表中的值更新当前表?

转载 作者:行者123 更新时间:2023-12-03 00:25:30 28 4
gpt4 key购买 nike

我有两个表,Table_A 和 Table_B。 Table_A 与Table_B 具有一对多关系。

在子表(Table_B)中插入记录后,我想使用触发器从父表(Table_A)中的字段中获取值并更新Table_B中当前插入的记录。

表_A

PK|EmpID|MemID|Firstname|Lastname
----------------------------------
1 |1234 |AB123|John | Doe
2 |5678 |CD456|Jane | Smith

表_B

PK|EmpID|MemID|Description
---------------------
1 |1234 |NULL |Finance
2 |1234 |NULL |IT
3 |5678 |NULL |Finance
4 |5678 |NULL |Management

触发器应从 Table_A 中获取 MemID 值,并更新其在 Table_B 中的相应值,其中 [Table_A].[EmpID] = [Table_B].[EmpID]。当然,在 Table_B 中插入 4 次后,结果应该如下:

PK|EmpID|MemID|Description
---------------------
1 |1234 |AB123|Finance
2 |1234 |AB123|IT
3 |5678 |CD456|Finance
4 |5678 |CD456|Management

我广泛搜索了其他技术网站,但似乎找不到适合这种特定场景的网站。作为绝望之举,我注册了这个网站,这将是我第一篇寻求帮助的帖子。

以下是我尝试在 MS SQL Server 2008 R2 中创建第一个触发器的徒劳尝试。

CREATE TRIGGER dbo.trgInsMemID
ON dbo.Table_B
AFTER INSERT
AS
BEGIN
UPDATE dbo.Table_B
SET MemID =
(SELECT MemID
FROM inserted i
JOIN dbo.Table_A c ON c.EmpID = i.EmpID)
FROM dbo.Table_B b
JOIN inserted i ON i.MemID = b.MemID
END

最佳答案

我相信您会希望将更新语句更改为如下所示:

UPDATE b
SET b.MemId = a.MemId
FROM dbo.Table_B AS b
INNER JOIN Inserted AS i ON b.EmpId = i.EmpId
INNER JOIN dbo.Table_A AS a ON b.EmpId = a.EmpId

这将仅更新 b 中也在 insterted 表中的记录。 (第一个内部连接)

然后,它将 INNER JOIN 插入 EmpId 上的 Table_A,以提取正确的 MemId 来更新您的记录.

关于sql - 如何编写更新触发器以根据 SQL Server 2008 中另一个表中的值更新当前表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8276261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com