Update einer Spalte in einem trigger nach dem Update nur bestimmte Spalte in der gleichen Tabelle in SQL Server 2008

Habe ich die folgende Tabelle mit dieser Struktur:

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,
)

Was ich will, genau das ist es, erstellen Sie einen trigger, der update [TransactionDateTime] mit der aktuellen datetime -, nur, wenn die Spalte [acceptanceState] aktualisiert.

Habe ich erstellt, der folgende trigger

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

Das problem mit diesem trigger ist, dass es updates der Spalte [TransactionDateTime] aber wenn ich ändern, auf eine beliebige Spalte in der Tabelle, und das, was ich will, ist zu aktualisieren [TransactionDateTime] nur, wenn die Spalte [acceptanceState] ist geändert/aktualisiert. Kann ich Hilfe finden? Wie, um die Bedingung hinzuzufügen, die Aktualisierung [TransactionDateTime] nur, wenn [acceptanceState] ist geändert/aktualisiert?

Ich suchte eine Menge für das ähnliche problem, aber ich finde nicht genau das gleiche problem.

Sie müssen hinzufügen die deleted-Tabelle zu Ihrer Abfrage, und überprüfen Sie, dass die inserted-und deleted-Werte sind nicht das gleiche.
Auch ich glaube, dass SQL Server die Funktion "IF UPDATE(Spaltenname)" können Sie überprüfen, um zu sehen, ob eine bestimmte Spalte aktualisiert wurde.
wie wird sich dieser Arbeit auf mehrere Zeilen aktualisieren, obwohl?
ein Problem mit den UPDATE(Spaltenname) ist, dass es Sie gibt true zurück, wenn die Spalte ist in dem update enthalten. Sie berücksichtigen nicht die tatsächlichen Werte. In anderen Worten, es würde true zurückgeben, auch wenn die neuen und die alten Werte sind die gleichen.
Stimmt, @SeanLange, WENN die UPDATE() kann verwendet werden, um Ersatz der Prozessor ausführen einer Abfrage, wenn eine Spalte nicht vielleicht geändert haben, aber es funktioniert genau so, wie Sie sagen, gibt true zurück, wenn die Spalte in der update-Anweisung, unabhängig davon, ob sich der Wert geändert.

InformationsquelleAutor amal50 | 2015-05-04

Schreibe einen Kommentar