使用触发器仅插入或更新特定记录
Insert or Update only Particular Record using Trigger
如果 Table A 中有任何 Update/Insert,我正在尝试将记录插入 table B。触发器应该只在插入语句中插入记录,而不是所有 table 记录在 Table A 到 Table B 中。非常感谢您的帮助。
代码工作正常,但它试图将所有记录插入 table 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 table 应仅包含上述插入值,而不应包含 dbo.Test 值中的所有数据。
只需将 Test 替换为 Inserted on select 语句
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
);
当使用触发器(和 SELECT
或 MERGE
语句上的 OUTPUT
子句时,有一个名为 inserted
的特殊关键字 table 用于保存记录正在插入或更新的跟踪 table。如果您只想使用这些记录,而不是整个跟踪 table,则需要参考此 table,例如您的示例 (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
的特殊关键字 table 保存已删除的行(当由 DELETE
) 或更新行的旧版本(当由 UPDATE
触发时)。
如果 Table A 中有任何 Update/Insert,我正在尝试将记录插入 table B。触发器应该只在插入语句中插入记录,而不是所有 table 记录在 Table A 到 Table B 中。非常感谢您的帮助。
代码工作正常,但它试图将所有记录插入 table 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 table 应仅包含上述插入值,而不应包含 dbo.Test 值中的所有数据。
只需将 Test 替换为 Inserted on select 语句
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
);
当使用触发器(和 SELECT
或 MERGE
语句上的 OUTPUT
子句时,有一个名为 inserted
的特殊关键字 table 用于保存记录正在插入或更新的跟踪 table。如果您只想使用这些记录,而不是整个跟踪 table,则需要参考此 table,例如您的示例 (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
的特殊关键字 table 保存已删除的行(当由 DELETE
) 或更新行的旧版本(当由 UPDATE
触发时)。