AFTER 触发器(DML)

在 SQL Server 中构建与优化触发器

Florin Angelescu

Instructor

定义与属性

  • 触发时执行一组操作
  • 仅在 DML 事件完成后执行
  • 用于表或视图的 INSERTUPDATEDELETE 语句
在 SQL Server 中构建与优化触发器

AFTER 触发器前提条件

  • DML 语句所需的表或视图
  • 触发器将附加到同一张表

本示例使用 Products 表的输出:

| Product | Price | Currency | Quantity | Measure |
|---------|-------|----------|----------|---------|
| Apple   | 2.00  | USD      | 25000    | kg      |
| Apricot | 1.55  | USD      | 2500     | kg      |
| Avocado | 3.00  | USD      | 1000     | kg      |
| Banana  | 1.80  | USD      | 35000    | kg      |
在 SQL Server 中构建与优化触发器

AFTER 触发器前提条件

  • 目标表
  • 触发器说明
  • 触发事件(DML)
  • 触发器名称
  • Products
  • 将被删除产品的信息保存到历史表
  • DELETE
  • TrackRetiredProducts
在 SQL Server 中构建与优化触发器

AFTER 触发器前提条件小结

当从 Products 表删除行时…

将这些行的必要信息保存到 RetiredProducts 表。

| Product | Price | Currency | Quantity | Measure |
|---------|-------|----------|----------|---------|
| Apple   | 2.00  | USD      | 25000    | kg      |
| Apricot | 1.55  | USD      | 2500     | kg      | X
| Avocado | 3.00  | USD      | 1000     | kg      |
| Banana  | 1.80  | USD      | 35000    | kg      |
| Product | Measure | RemovalDate |
|---------|---------|-------------|
| Apricot | kg      | 19.04.2019  |
在 SQL Server 中构建与优化触发器

AFTER 触发器定义

CREATE TRIGGER TrackRetiredProducts

ON Products
AFTER DELETE
AS INSERT INTO RetiredProducts (Product, Measure) SELECT Product, Measure FROM deleted;
在 SQL Server 中构建与优化触发器

inserted 与 deleted 表

  • DML 触发器使用的特殊表
  • 由 SQL Server 自动创建
在 SQL Server 中构建与优化触发器

inserted 与 deleted 表

  • DML 触发器使用的特殊表
  • 由 SQL Server 自动创建
特殊表 INSERT UPDATE DELETE
inserted 新行 新行 N/A
deleted N/A 被更新的行 被删除的行
在 SQL Server 中构建与优化触发器

完整的 AFTER 触发器

CREATE TRIGGER TrackRetiredProducts
ON Products
AFTER DELETE
AS
    INSERT INTO RetiredProducts (Product, Measure)
    SELECT Product, Measure
    FROM deleted;
在 SQL Server 中构建与优化触发器

Passons à la pratique !

在 SQL Server 中构建与优化触发器

Preparing Video For Download...