【问题标题】:Trigger for update table after update records in another table?更新另一个表中的记录后触发更新表?
【发布时间】:2018-01-08 23:44:18
【问题描述】:

当在 table_1 上更新任何字段时,我需要一个触发器来更新 Table_2 上的字段。我创建了一个,但是当我在 Table_2 上的 table_1 中更新一条记录时,它正在更新所有字段。

示例 SQL:-

 Create trigger trigger-1  ON Table_1 After Update  
 As 
 begin  
     SET NOCOUNT ON;   
     Insert into table_2 (Col1,col2,col3,..etc) Select (ins.column names) 
     from  table_1

假设 table_1 有很多字段,但我仍然需要更新字段。如何使用触发器仅获取从 table_1 到 table_2 的更新字段?

【问题讨论】:

  • 您是否正在实施一些审计跟踪之类的事情?

标签: sql-server sql-server-2012 triggers


【解决方案1】:

您的语法错误。您可以使用inserted 表。它包含基表的所有列

INSERT INTO table_2 ( col1, col2, col3, . . .)
SELECT  i.cola, i.colb, i.colc, . . .
FROM    inserted i

如果您需要知道更新了哪些列,请使用UPDATE( column name )

https://docs.microsoft.com/en-us/sql/t-sql/functions/update-trigger-functions-transact-sql

【讨论】:

  • 这应该可以。如果没有,请发布您的确切触发器
【解决方案2】:

终于,我找到了完美的答案。

对于UPDATE

删除的表将包含旧值,而插入的表 包含更新后的新值。

根据要求,如果我们想要触发器中的所有字段,我们需要提及表中的所有字段并编写如下内容:

对于更新后的记录:

CREATE TRIGGER trg_ProdUpdate
ON dbo.Production 
AFTER UPDATE
AS
Begin

INSERT INTO dbo.Attribiute (ID, attributeValue, attributetype)

SELECT i.ID, i.prodrecord, i.prodvalue
FROM Production i
INNER JOIN INSERTED d ON i.ID = d.ID

更新前的记录:

CREATE TRIGGER trg_ProdUpdate
ON dbo.Production 
AFTER UPDATE
AS
Begin

INSERT INTO dbo.Attribiute (ID, attributeValue, attributetype)

SELECT i.ID, i.prodrecord, i.prodvalue
FROM Attribiute i
INNER JOIN DELETED d ON i.ID = d.ID

我们可以通过抓取 Identical 字段(在两种情况下都是相同的)将 Inserted 和 Deleted in 加入到一些历史表中以进行审计。删除表中的旧值,插入表中的新值,然后将所有内容存储在单独的表中

为了更好地理解,请查看此链接Trigger insert old values- values that was updated

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多