在不使用触发器的情况下捕获 SQL Server 中已删除的行
介绍 :
使用触发器有时可能既困难又耗时。触发器可能会减慢服务器的输出速度并对系统资源造成额外压力。许多人使用触发器来跟踪已从表中删除的所有数据。我们可能不使用触发器,而是使用另一个过程,如下面的示例所示。请注意,以下安排不能替代删除触发器。另一方面,如果我们只想记录已删除的行,我们可能会使用它而不是触发器。
例子 :
让我们创建两个表——
CREATE TABLE GeekTab1 (Id1 INT, Name1 VARCHAR(100))
GO
CREATE TABLE GeekTab2 (Id2 INT, Name2 VARCHAR(100))
GO
将示例数据插入表中 –
INSERT INTO GeekTab1 (Id1, Name1)
VALUES(1,'Khushi'), (2, 'Komal')
GO
从表中选择数据——
Select * from GeekTab1
GO
输出 -Id1 Name1 1 Khushi 2 Komal
从 GeekTab1 中删除并插入 GeekTab2 –
DELETE FROM GeekTab1
OUTPUT deleted.Id1, deleted.Name1
INTO GeekTab2
WHERE Id1 = 1
GO
从两个表中选择数据 -
SELECT * FROM GeekTab1;
GO
SELECT * FROM GeekTab2;
GO
输出 -
极客Tab1Id1 Name1 2 Komal
极客Tab2Id2 Name2 1 Khushi
结论 :
上述案例中的 DELETE 语句中使用了 OUTPUT 子句,它记录了从 GeekTab1 中删除的语句。