SQL Server 中的 INSTEAD OF DELETE 触发器

SQL INSTEAD OF DELETE 触发器将在执行开始前触发。因此,您可以使用此 SQL INSTEAD OF DELETE 触发器在删除操作前将值存储在另一个表中,或者执行某些操作,或者删除不同的表等。

对于此 INSTEAD OF DELETE 触发器演示,我们将使用下面的表。在这里,我们的任务是在此 Employee 表上创建一个 SQL Server INSTEAD OF DELETE TRIGGER。并通过使用此触发器,我们想要限制删除操作。

Employee Table Audit 也保存了相同的 14 条记录,以及服务器实例名称、服务器名称和插入时间(审计信息)。

SQL Server 中的 Instead Of DELETE 触发器示例

在表和视图中创建了 Instead of Delete Triggers。通常,我们将这些触发器用于视图。让我们看看如何在 SQL Server 中创建 Instead of delete Triggers。例如,如果您想阻止用户删除原始表中的记录,并且您希望将这些日志保存在另一个历史表中,请使用此触发器。

在这里,我们将使用 CREATE TRIGGER 语句在 Employee 表上创建一个触发器。从下面的代码中,您可以看到我们正在使用 MERGE 语句 来选择要从 Employee 表中删除的所有记录。然后我们从 Audit 表中删除这些记录。

提示:您可以参考 SQL Server 中的触发器、INSTEAD OF INSERT TRIGGERS视图 和INSTEAD OF UPDATE TRIGGERS 文章。

这意味着当用户删除任何 Employee 表记录时,Instead od delete 触发器将从 audit 表中删除这些记录。而 Employee 表保持不变。

CREATE TRIGGER InsteadOfDELETETriggerExample on [EmployeeTable]
INSTEAD OF DELETE
AS

MERGE [EmployeeTableAudit] AS AuditTab
USING (SELECT * FROM DELETED) AS Emp
ON AuditTab.ID = emp.ID
WHEN MATCHED THEN DELETE;
PRINT 'We Successfully Fired Our First INSTEAD OF DELETE Triggers in SQL Server.'
GO
Instead Of DELETE Triggers in SQL Server 3

让我通过打开对象资源管理器向您展示新创建的 Instead Of DELETE Trigger 。接下来,转到 SQL Tutorial Database -> 展开 Employee Table -> 然后展开 Triggers Folder。

Instead Of DELETE Triggers in SQL Server 4

为了演示目的,我们将删除 Employee 表中所有 Occupation = Professional 或 Education = Bachelors 的记录。

DELETE FROM [EmployeeTable]
WHERE [Occupation] = N'Professional' OR
[Education] = N'Bachelors'
Instead Of DELETE Triggers in SQL Server 5

从上面的截图可以看到,我们的 SQL Server Instead Of DELETE Triggers 被触发了。并且,它不是从 Employee 表中删除 4 条记录,而是从 Employee Audit 表中删除。请使用以下 SQL 查询来检查插入到 Employee 表中的记录。

SELECT [ID]
,[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [EmployeeTable]

尽管我们对 Employee 表执行了删除操作。正如您从上面的截图可以看到的,我们的 Emp 表保持不变。接下来,使用以下 select 查询检查 Employee 表 Audit 中的记录。

SELECT [Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,[ServerName]
,[ServerInstanceName]
,[Insert Time]
FROM [EmployeeTableAudit]
Instead Of DELETE Triggers in SQL Server 7

您可以在此处看到 SQL Server Instead Of DELETE Triggers 已从 Employee audit 表中删除了匹配的记录。