2012-02-19 11 views
2

に例を持っていますか私が話しているかの簡単な説明を与える:は、トリガーがTHISROWオブジェクト

AFTER INSERT,UPDATE 
IF (This.Active = 1) 
     BEGIN 
     UPDATE Table2 SET AllActive = 1 WHERE This.ID = Table2.ID 
     END 
ELSE 
     BEGIN 
     UPDATE Table2 SET AllActive = 0 WHERE This.ID = Table2.ID 
     END 

私はthisを使用していることは、私が何を探しているものだからです。

Do Triggersにはjavascriptのようなthisがありますか?

もしそうでなければ、次善のものは何ですか?

答えて

4

、SQL Serverのトリガに関する一つの一般的な誤解は:彼らが影響を受ける行ごとに解雇ませている - しかし、声明によります。

したがって、複数の行を挿入または更新する文がある場合、トリガー内のInserted(および/またはDeleted)疑似表には複数の行が含まれます。 あなたは1つの行を扱っていると仮定してください!このようなトリガーは、だからあなたの場合には、あなたはおそらくこのような何かを書きたいと思う早く失敗以降

ます:

UPDATE t 
    SET AllActive = i.Active 
    FROM Inserted i 
    INNER JOIN dbo.Table2 AS t 
    ON t.ID = i.ID 

これはTable2テーブル内のすべての行を更新しにAllActive列を設定しますInsertedテーブル(新しく挿入された行と更新された行の新しい値が含まれています)に含まれる行ごとにActiveの値

+0

すべてを通過する必要がありますか? Ugggghh .. –

+0

あなたは「すべてを通り抜けてください」とはどういう意味ですか?これは、ワンパス、セットベースのアップデートです。提案された擬似コードは、一度に1行ずつ処理しようとしていたものです。これは、RDBMSで一般的にやりたいことではありません。 –

+0

1つのインサートで複数の行を実行している場合でも、行ごとにそれを挿入する必要があるため、トリガーは1行あたりの処理が多いと考えました。 –

関連する問題