如果表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值中的所有数据。
答案 0 :(得分:1)
使用触发器(以及OUTPUT
或SELECT
语句上的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
在对UPDATE
或DELETE
触发器进行编码时,还有一个名为deleted
的关键字特殊表,用于保存已删除的行(由DELETE
触发时)或旧版本(由UPDATE
触发时)。
答案 1 :(得分:0)
只需将Test替换为select语句上的Inserted
BitSet