使用触发器仅插入或更新特定记录

时间:2019-02-13 08:03:35

标签: sql-server tsql azure-sql-database database-trigger

如果表A中有任何更新/插入,我尝试将记录插入表B中。触发器应仅在插入语句中插入记录,而不是表A中的所有表记录插入表B。感谢。

代码工作正常,但是它尝试将所有记录而不是特定记录插入表A中。

CREATE TRIGGER TestTrigger  
ON dbo.Test 
FOR INSERT,update 
as

  insert into dbo.TestBKP(ID, LastName, FirstName, Age, updatetime)
    select ID, LastName, FirstName, Age, getdate()
    from Test

  print 'Row Inserted';

GO

insert into dbo.Test values(1,'AAA','BBB',24)

期望

dbo.TestBKP表应仅包含上述插入值,而不能包含dbo.Test值中的所有数据。

2 个答案:

答案 0 :(得分:1)

使用触发器(以及OUTPUTSELECT语句上的MERGE子句)时,有一个名为inserted的特殊关键字表,用于保存要插入的跟踪表的记录或更新。如果仅想使用这些记录,而不是整个跟踪表,则需要引用此表(例如,FROM dbo.Test)。

CREATE TRIGGER TestTrigger ON dbo.Test 
    FOR INSERT, UPDATE
AS
BEGIN

    insert into dbo.TestBKP (
        ID, 
        LastName, 
        FirstName, 
        Age, 
        updatetime)
    select 
        ID, 
        LastName, 
        FirstName, 
        Age, 
        getdate()
    from 
        inserted AS I -- This "inserted" table is a copy of dbo.Test with only new/updated records

    print 'Row Inserted';

END

在对UPDATEDELETE触发器进行编码时,还有一个名为deleted的关键字特殊表,用于保存已删除的行(由DELETE触发时)或旧版本(由UPDATE触发时)。

答案 1 :(得分:0)

只需将Test替换为select语句上的Inserted

BitSet