SQL Server 的 AFTER INSERT 触发器将在插入操作完成后触发。After Insert 触发器不支持视图。对于这个 SQL Server After Insert 触发器演示,我们使用下面显示的表。
您可以看到我们的 Employee 表是空的。我们的任务是在此 Employee 表上创建 SQL AFTER INSERT TRIGGER。通过使用这个 After Insert 触发器,我们希望将记录插入到 Employee Table Audit 中,以及审计信息。

并且我们的 Employee Table Audit 也是空的。

SQL Server 的 INSERT 触发器示例
在此示例中,我们将使用 CREATE TRIGGER 语句在 Employee 表上创建 SQL Server 的 After Insert Triggers。
请记住,After Insert 触发器将在 Employee 表的 Insert 操作完成后触发。一旦它完成在 Employee 表中的插入,它将开始在 Employee audit 表中插入。如果它在 Employee 表中插入失败,那么它将不会在 Audit 表中插入。
提示:您可以参考 SQL Server 中的 AFTER UPDATE TRIGGERS、TRIGGERS 和 AFTER DELETE TRIGGERS 文章。
-- Example for After INSERT Triggers in SQL Server
CREATE TRIGGER AfterINSERTTrigger on [EmployeeTable]
FOR INSERT
AS DECLARE @EmpID INT,
@EmpName VARCHAR(50),
@EmpEducation VARCHAR(50),
@EmpOccupation VARCHAR(50),
@EmpYearlyIncome DECIMAL (10, 2),
@EmpSales DECIMAL (10, 2);
SELECT @EmpID = ins.ID FROM INSERTED ins;
SELECT @EmpName = ins.Name FROM INSERTED ins;
SELECT @EmpEducation = ins.Education FROM INSERTED ins;
SELECT @EmpOccupation = ins.Occupation FROM INSERTED ins;
SELECT @EmpYearlyIncome = ins.YearlyIncome FROM INSERTED ins;
SELECT @EmpSales = ins.Sales FROM INSERTED ins;
INSERT INTO [EmployeeTableAudit](
[ID]
,[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,[ServerName]
,[ServerInstanceName]
,[Insert Time])
VALUES (@EmpID,
@EmpName,
@EmpEducation,
@EmpOccupation,
@EmpYearlyIncome,
@EmpSales,
CAST( SERVERPROPERTY('MachineName') AS VARCHAR(50)),
CAST( SERVERPROPERTY('ServerName') AS VARCHAR(50)),
GETDATE()
);
PRINT 'We Successfully Fired the AFTER INSERT Triggers in SQL Server.'
GO

首先,我们使用 DECLARE 语句声明了所需的变量。
DECLARE @EmpID INT, @EmpName VARCHAR(50), @EmpEducation VARCHAR(50), @EmpOccupation VARCHAR(50), @EmpYearlyIncome DECIMAL (10, 2), @EmpSales DECIMAL (10, 2);
接下来,我们使用 SELECT Statement 来选择记录。以下语句将从插入的值中选择一条记录。
SELECT @EmpID = ins.ID FROM INSERTED ins; SELECT @EmpName = ins.Name FROM INSERTED ins; SELECT @EmpEducation = ins.Education FROM INSERTED ins; SELECT @EmpOccupation = ins.Occupation FROM INSERTED ins; SELECT @EmpYearlyIncome = ins.YearlyIncome FROM INSERTED ins; SELECT @EmpSales = ins.Sales FROM INSERTED ins;
接下来,我们使用 INSERT Statement 将选定的值插入到 Employee Audit 表中。这里,以下语句返回机器名称和服务器名称。此信息可能对审计有帮助。
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName')
我将向您展示新创建的 SQL Server After Insert 触发器。转到数据库 -> 转到并展开 Employee 表 -> 然后展开 Triggers 文件夹。

为了演示目的,我们将向 Employee 表中插入五条随机记录,以检查 After insert Trigger 是否已触发。
INSERT INTO [EmployeeTable] (
[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
)
VALUES ('Tutorial Gateway', 'Masters', 'Admin', 150000, 900)
,('Imran Khan', 'Bachelors', 'Skilled Professional', 69000, 100)
,('Doe Lara', 'Bachelors', 'Management', 85000, 60)
,('Ramesh Kumar', 'High School', 'Professional', 45000, 630)
,('John Ruiz', 'Partial High School', 'Clerical', 40000, 220)

从上图可以看出,我们的 Sql After Insert 触发器已被触发,并且还将一条记录插入到了 Audit Table。请使用以下 SQL 查询来检查 Employee 表中的插入记录。
SELECT [ID]
,[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
FROM [EmployeeTable]

接下来,使用以下查询检查 Employee Table Audit 中的记录。
SELECT [ID]
,[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,[ServerName]
,[ServerInstanceName]
,[Insert Time]
FROM [EmployeeTableAudit]

正如您所看到的,我们的 Audit Table 返回了一条记录。这是因为,在我们的 After Insert 触发器定义中,我们为每次插入选择了一条记录。
SQL Server 的 INSERT 触发器示例 2
如何使用 After Insert Triggers 将所有记录插入到审计表(触发表)中。为此,我们将修改我们在上一个示例中创建的触发器。
-- Second Example for After INSERT Triggers in SQL Server
CREATE TRIGGER AfterINSERTTriggerExample on [EmployeeTable]
FOR INSERT
AS
INSERT INTO [EmployeeTableAudit](
[ID]
,[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
,[ServerName]
,[ServerInstanceName]
,[Insert Time])
SELECT ID,
Name,
Education,
Occupation,
YearlyIncome,
Sales,
CAST( SERVERPROPERTY('MachineName') AS VARCHAR(50)),
CAST( SERVERPROPERTY('ServerName') AS VARCHAR(50)),
GETDATE()
FROM INSERTED;
PRINT 'We Successfully Fired Our Second AFTER INSERT Triggers in SQL Server.'
GO
在这里,我们使用 INSERT INTO SELECT Statement 来选择正在插入到 Employee 表的所有记录。然后我们将这些记录插入到 Audit 表中。
接下来,让我向 employee 表插入一些随机记录。
INSERT INTO [EmployeeTable] (
[Name]
,[Education]
,[Occupation]
,[YearlyIncome]
,[Sales]
)
VALUES ('Tutorial Gateway', 'Masters', 'Admin', 150000, 900)
,('Doe Lara', 'Bachelors', 'Management', 85000, 60)
,('Ramesh Kumar', 'High School', 'Professional', 45000, 630)
,('John Ruiz', 'Partial High School', 'Clerical', 40000, 220)
,('Imran Khan', 'Bachelors', 'Skilled Professional', 69000, 100)

正如您所看到的,我们的 after insert 触发器已触发,并且还将所有记录插入到了 audit table。让我们看看 Emp 表。

接下来,请检查 Employee Audit 表。从下面的屏幕截图中可以看出,After Insert 触发器已插入所有记录。

评论已关闭。