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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie brauchen nur fügen Sie eine IF-UPDATE-check und die join-Tabelle gelöscht, in dem der Auslöser:
Froh zu hören, dass! Wenn Sie könnten bitte mir einen gefallen tun und markieren Sie es als Antwort akzeptiert, das wäre wunderbar! Danke!
Ich kenn es, sorry, ich bin neu hier, ich wusste nicht, über diese Marke vor
Keine Sorge! 🙂 Ich Lerne hier jeden Tag etwas neues! Nochmals vielen Dank!
nur erfahren Sie mehr über diese Möglichkeit zu überprüfen, welche Spalte aktualisiert wird. neu für mich !
InformationsquelleAutor FutbolFan
Der beste Weg, dies zu tun ist, vergleichen die
Inserted
undDeleted
pseudo-Tabelle. In einemAFTER UPDATE
auslösen, dieDeleted
pseudo-Tabelle enthält die alten Werte, währendInserted
enthält die neue. Also, wenn dieDeleted.acceptanceState
ist nicht das gleiche wieInserted.acceptanceState
, dann, dass die Spalte aktualisiert wurde.So müssen Sie leicht erweitern Sie Ihre trigger wie diese:
WHERE
Klausel enthaltennull
auch?AND (i.acceptanceState <> d.acceptanceState OR d.acceptanceState IS NULL AND i.acceptanceState IS NOT NULL)
InformationsquelleAutor marc_s