AFTER トリガー(DML)

SQL Server のトリガー構築と最適化

Florin Angelescu

Instructor

定義と特性

  • 起動時に一連の処理を実行
  • DML イベント完了後にのみ実行
  • テーブルまたはビューの INSERT、UPDATE、DELETE で使用
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      | 2019-04-19  |
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 のトリガー構築と最適化

練習しましょう!

SQL Server のトリガー構築と最適化

Preparing Video For Download...