Mise à jour d'une colonne dans un déclencheur après la mise à jour seule colonne de la même table dans SQL Server 2008

J'ai le tableau suivant avec cette structure:

CREATE TABLE [dbo].[Tasks]
(
    [TasksID] [int] IDENTITY(1,1) NOT NULL,
    [CommitteeID] [int] NULL,
    [TransactionDateTime] [datetime2](7) NULL,
    [inspectionStatus] [nvarchar](50) NULL,
    [Latitude] [nvarchar](50) NULL,
    [Longitude] [nvarchar](50) NULL,
    [acceptanceState] [nvarchar](50) NULL,
    [comments] [nvarchar](350) NULL,
    [ScheduledDateTime] [datetime2](7) NULL,
)

Ce que je veux exactement est de créer un déclencheur de mise à jour [TransactionDateTime] avec la dateheure actuelle, seulement si la colonne [acceptanceState] est mis à jour.

J'ai créé le déclencheur suivant

CREATE TRIGGER [dbo].[TransactionDateUpdate]
ON [dbo].[Tasks]
AFTER UPDATE  
AS BEGIN
   UPDATE dbo.Tasks
   SET TransactionDateTime = GETDATE()
   FROM INSERTED i
   WHERE i.TasksID = Tasks.TasksID 
END

Le problème avec ce déclencheur, qu'il met à jour la colonne [TransactionDateTime] mais si j'ai fait le changement sur toute la colonne dans la table, et ce que je veux, c'est de mettre à jour [TransactionDateTime] seulement si la colonne [acceptanceState] est modifié ou mis à jour. Puis-je trouver de l'aide? Comment faire pour ajouter la condition de la mise à jour [TransactionDateTime] seulement si [acceptanceState] est modifié/mis à jour?

J'ai beaucoup cherché pour le même problème mais je n'ai pas trouvé exactement le même problème.

Vous devez ajouter de la table supprimée de votre requête et de vérifier que inserted et deleted valeurs ne sont pas les mêmes.
Aussi je crois que SQL Server a une fonction "SI une mise à JOUR(ColumnName)" qui permet de vérifier si une certaine colonne a été mis à jour.
comment est-ce que ce travail sur plusieurs lignes de mise à jour, si?
un problème avec l'utilisation de la mise à JOUR(ColumnName) est qu'elle retourne true si la colonne est inclus dans la mise à jour. Il ne tient pas compte des valeurs réelles. En d'autres termes, il serait de retour vrai même si les nouvelles et les anciennes valeurs sont les mêmes.
Vrai, @SeanLange, SI la mise à JOUR() peuvent être utilisés pour épargner le processeur de l'exécution d'une requête lorsqu'une colonne ne peut pas avoir changé, mais il fait exactement comme vous le dites, retourne true si la colonne a été inclus dans la mise à jour de la déclaration, peu importe si la valeur a changé.

OriginalL'auteur amal50 | 2015-05-04