私はこれに慣れていませんが、最初の簡単なトリガーを書きたいと思います。フィールドA、B、Cを持つmytableがあるとします。ユーザーが A と B を挿入または更新するときに、トリガーによって C=A+B を更新したいのですが、簡単でしょうか? ありがとう
質問する
3290 次
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 の例を実行するには:
- スキーマを作成し、いくつかのサンプル データを追加してから、トリガー定義を追加します (したがって
c
、この時点ではデータが取り込まれていません)。 - 表から選択して、値の例を確認してください。
- 行を更新し、テーブルから再度選択します (
c
データが入力されていることがわかります)。 - 新しい行を挿入し、テーブルからすべてを再度選択します (
c
この新しい行には が入力されています)。
これがどのように機能するかについてもう少し説明すると、トリガーの実行中に、SQLサーバー(あなたが使用しているものだと思います)は2つの一時テーブルinserted
を作成deleted
し、影響を受ける行のコピーを使用して、結合または選択できますそれらのテーブルからデータを取得する必要がある場合。この場合、更新/挿入操作の影響を受けた ID のリストを取得し、c
それらの行のみを更新します。詳細については、この MSDN 記事を参照してください。
于 2012-06-13T15:07:34.940 に答える