如果表A中有任何更新/插入,我试图将记录插入表B.触发器应该只插入insert语句中的记录而不是表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值中的所有数据。
当使用触发器(以及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
触发时)。
只需将Select替换为select语句中的Inserted
CREATE TRIGGER TestTrigger ON dbo.Test
FOR INSERT
AS
INSERT INTO dbo.TestBKP
(ID,
LastName,
FirstName,
Age,
updatetime
)
SELECT ID,
LastName,
FirstName,
Age,
GETDATE()
FROM **inserted**;
PRINT 'Row Inserted';
GO
INSERT INTO dbo.Test
VALUES
(1,
'AAA',
'BBB',
24
);