【问题标题】:Trigger that updates another table with only the edited row仅使用已编辑行更新另一个表的触发器
【发布时间】:2020-06-18 19:30:32
【问题描述】:

是否可以在仅将某人编辑的行输入到新表中的数据库上创建触发器。所以说在tbl1 有人更改了一个名为“名称”的列。我想获取已编辑的行并将其放在tbl2 中。因此,我想从 tbl1 中仅提取该已编辑行的其他列并将其存储在新表中。我想跟踪更改名称的时间以及日期和时间。这甚至可以通过触发器实现吗?我了解如何为触发事件设置表格。但是我很难理解如何在没有加入的情况下将值从 tbl1 带到 tbl2

ALTER TRIGGER testname
ON  tbl1
AFTER UPDATE
AS  
IF UPDATE(name)
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    INSERT INTO tbl2 (ODID,ID2)
    VALUES ();
END
GO

【问题讨论】:

标签: sql sql-server database-trigger


【解决方案1】:

根据您的要求,您可以在触发器中使用动态 Sql。

这只是一个想法,

ALTER TRIGGER testname
ON  tbl1
AFTER UPDATE
AS 


BEGIN
    SET NOCOUNT ON;
    declare @Sql varchar(500)=''
    declare @Col varchar(500)=''

    IF UPDATE(FirstName)
    set @Col=' FirstName '
    IF UPDATE(LastName)
    set @Col=@Col+', LastName '

    set @Sql='INSERT INTO tbl2 (ODID,ID2)
    select '+@Col+' from inserted'

    sp_executesql @Sql

END
GO

这是一种非常繁琐的方法。 而是创建将作为 tbl1 副本的 History 表。

ALTER TRIGGER testname
ON  tbl1
AFTER UPDATE
AS 


BEGIN
    SET NOCOUNT ON;
    insert into tbl1History
    select * from deleted

END
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多