2017-02-03 10 views
1

SQL Server 2012でトリガーを実装する場合、更新クエリがテーブルの列に対して発生すると、その特定の列の既存の値を新しい値と比較する必要があります。SQL Server 2012でのトリガー比較と更新

新しい値が大きい場合は、テーブルのみが更新されます。

答えて

0

approchの下に使用してください:

CREATE TRIGGER trigger_For_Update1 
ON TableName 
FOR UPDATE 
AS BEGIN 
    DECLARE @n_OldValue int, 
      @n_NewValue int 

    SELECT 
     @n_OldValue = b.ValuesYouCompare, 
     @n_NewValue = a.ValuesYouCompare -- Update Old and New values 
    FROM 
     inserted a, deleted b 

    IF @n_NewValue > @n_OldValue 
    BEGIN 
     PRINT 'Transaction Error' 
     ROLLBACK TRAN -- Roll Back the transaction if condition is not valid 
    END 
END 
+0

あなたのトリガーがある** MAJOR **あなたはそれが呼び出されることになりますと仮定しているように見えるという点で欠陥**一度行あたり** - つまり**ない**ケース。トリガーは文ごとに** **発動します。したがって、このトリガーを起動させるUPDATEステートメントが25行更新された場合、トリガーは一度**発生しますが、その後に '挿入され、'削除されます'疑似テーブルはそれぞれ25行を含みます。あなたのコードがここで選択する25行のうちどれですか? 'SELECT ... FROM Inserted i' ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **非決定的な** **任意の行**を取得し、**すべての他の行を無視します**。 –

+0

[古いスタイルのJOINを使って蹴るのが悪い](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - ANSI - ** 92 ** SQL標準(** 25年**前)のold * style *カンマ区切りのテーブル*スタイルのリストが*適切な* ANSI 'JOIN'構文に置き換えられました。使用は推奨されない –

関連する問題