0

私はこれに慣れていませんが、最初の簡単なトリガーを書きたいと思います。フィールドA、B、Cを持つmytableがあるとします。ユーザーが A と B を挿入または更新するときに、トリガーによって C=A+B を更新したいのですが、簡単でしょうか? ありがとう

4

1 に答える 1

2

これは、あなたが尋ねるようにするトリガーです。mytable には ID 列がないため、更新された行に対して update c のみを指定する方法はありません (つまり、c挿入/更新のたびにすべての行で の値が再計算されます)。

CREATE TRIGGER mytrigger
ON mytable
FOR INSERT, UPDATE
AS
    UPDATE mytable
    SET    c = COALESCE(a, 0) + COALESCE(b, 0)

これは、計算列の適切な候補になります。

CREATE TABLE mytable
  (
     a INT,
     b INT,
     c AS COALESCE(a, 0) + COALESCE(b, 0)
  )

編集c:更新/挿入された行のみを更新するID列の例:

CREATE TRIGGER mytrigger
ON mytable
FOR INSERT, UPDATE
AS
    UPDATE mytable
    SET    c = COALESCE(a, 0) + COALESCE(b, 0)
    WHERE  ID IN (SELECT ID
                  FROM   inserted)

これをライブで見ることができるSQL Fiddleを作成しました。

SQL Fiddle の例を実行するには:

  1. スキーマを作成し、いくつかのサンプル データを追加してから、トリガー定義を追加します (したがってc、この時点ではデータが取り込まれていません)。
  2. 表から選択して、値の例を確認してください。
  3. 行を更新し、テーブルから再度選択します (c データが入力されていることがわかります)。
  4. 新しい行を挿入し、テーブルからすべてを再度選択します (c この新しい行には が入力されています)。

これがどのように機能するかについてもう少し説明すると、トリガーの実行中に、SQLサーバー(あなたが使用しているものだと思います)は2つの一時テーブルinsertedを作成deletedし、影響を受ける行のコピーを使用して、結合または選択できますそれらのテーブルからデータを取得する必要がある場合。この場合、更新/挿入操作の影響を受けた ID のリストを取得し、cそれらの行のみを更新します。詳細については、この MSDN 記事を参照してください。

于 2012-06-13T15:07:34.940 に答える