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

如何根据SQL Server 2008中另一个表中的值编写更新触发器来更新当前表?,sql,sql-server,sql-server-2008,triggers,Sql,Sql Server,Sql Server 2008,Triggers,我有两个表,表A和表B。表A和表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|Des

我有两个表,表A和表B。表A和表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
触发器应从表_A获取MemID值,并更新表_B中的对应值,其中[Table_A].[EmpID]=[Table_B].[EmpID]。当然,在表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中的记录,这些记录也在所插入的
表中。(第一个
内部联接


然后,它将
内部连接
EmpId
上的
表A
中,以提取适当的
MemId
来更新您的记录。

欢迎使用StackOverflow。感谢您发布表结构、数据、预期结果以及您迄今为止的尝试。它显示了努力,并使社区更容易帮助您+1感谢您的帮助,是的,当我插入100条记录时,它确实工作得很好,正如预期的那样,它确实需要几秒钟的时间。我实际上是通过一个C#程序(实现并行性)加载一个文本文件,该程序使用LINQ to SQL写入DB,当我加载两个文件时,触发器不同步。但我只想说,你确实根据我的帖子完美地回答了我的问题。既然你已经纠正了我的语法,我只需要更多地使用触发器。谢谢。@Django如果不需要立即更新MemId,另一个选择是在两个文件都加载到数据库后运行一次更新。如果删除插入的
内部联接
行,您将能够用表A中的MemId更新EmpId上与表A中的表A相匹配的所有表B记录。您还可以查看事务以消除同步问题,但这将增加锁定。很抱歉,回复太晚。我感谢你的帮助,提供了另一个选择。我两个都试过了,我更喜欢第一个。再次感谢你。