1
SQL Server 2012でトリガーを実装する場合、更新クエリがテーブルの列に対して発生すると、その特定の列の既存の値を新しい値と比較する必要があります。SQL Server 2012でのトリガー比較と更新
新しい値が大きい場合は、テーブルのみが更新されます。
SQL Server 2012でトリガーを実装する場合、更新クエリがテーブルの列に対して発生すると、その特定の列の既存の値を新しい値と比較する必要があります。SQL Server 2012でのトリガー比較と更新
新しい値が大きい場合は、テーブルのみが更新されます。
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
あなたのトリガーがある** MAJOR **あなたはそれが呼び出されることになりますと仮定しているように見えるという点で欠陥**一度行あたり** - つまり**ない**ケース。トリガーは文ごとに** **発動します。したがって、このトリガーを起動させるUPDATEステートメントが25行更新された場合、トリガーは一度**発生しますが、その後に '挿入され、'削除されます'疑似テーブルはそれぞれ25行を含みます。あなたのコードがここで選択する25行のうちどれですか? 'SELECT ... FROM Inserted i' ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **非決定的な** **任意の行**を取得し、**すべての他の行を無視します**。 –
[古いスタイルの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'構文に置き換えられました。使用は推奨されない –