MS - SQL Trigger Flag
Hallo,
ich bräuchte einen Trigger, der das Feld BMDExport auf 1 setzt, wenn etwas am Datensatz geändert wurde.
Wenn ich das Feld BMDExport auf 0 setze soll nix passieren.
Bei meinem Trigger wird leider BMDExport sofort wieder auf 1 zurückgesetzt, wenn ich 0 reinschreiben will.
Bitte um Eure Hilfe.
Hab momentan nur ganz einfache Trigger gebaut.
CREATE TRIGGER [trSTAMMDATENupdate] ON dbo.STAMMDATEN FOR UPDATE AS SET NOCOUNT ON
DECLARE @dsn BIGINT
DECLARE @bmdexport TINYINT
SELECT @dsn = DSN,
@bmdexport = BMDExport
FROM inserted
IF @bmdexport = 0 BEGIN
UPDATE dbo.STAMMDATEN
SET BMDExport = 1
WHERE DSN = @dsn
END
ich bräuchte einen Trigger, der das Feld BMDExport auf 1 setzt, wenn etwas am Datensatz geändert wurde.
Wenn ich das Feld BMDExport auf 0 setze soll nix passieren.
Bei meinem Trigger wird leider BMDExport sofort wieder auf 1 zurückgesetzt, wenn ich 0 reinschreiben will.
Bitte um Eure Hilfe.
Hab momentan nur ganz einfache Trigger gebaut.
CREATE TRIGGER [trSTAMMDATENupdate] ON dbo.STAMMDATEN FOR UPDATE AS SET NOCOUNT ON
DECLARE @dsn BIGINT
DECLARE @bmdexport TINYINT
SELECT @dsn = DSN,
@bmdexport = BMDExport
FROM inserted
IF @bmdexport = 0 BEGIN
UPDATE dbo.STAMMDATEN
SET BMDExport = 1
WHERE DSN = @dsn
END
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117582
Url: https://administrator.de/forum/ms-sql-trigger-flag-117582.html
Ausgedruckt am: 23.12.2024 um 19:12 Uhr
2 Kommentare
Neuester Kommentar
Hallo,
also wenn ich jetzt gerade keinen Hänger habe ist das auch ziemlich logisch. Wenn du BMDExport auf 0 setzt führst du ja ein Update durch, und jedes Update setzt BMDExport auf 1...
Und was man dagegen macht: Abfragen, was upgedated wurde. Und wenn es BMD... ist dann halt nicht umsetzen.
Zur Abfrage, ob eine Spalte akutalisiert wurde gibt es extra "IF UPDATE(column)", siehe z.B. http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx. Achtung: ich bin mir nicht ganz sicher, ob IF UPDATE nur "echte" Updates erkennt (sprich: der Wert wurde auch wirklich geändert) oder auch "unechte" (sprich: du hast ein UPDATE auf alle Zeilen durchgeführt, werden dann auch die als Upgedated angesehen, die bereits den gewünschten Wert hatten, bei denen der Wert also nicht mehr geändert wurde). Dann musst du u.U. noch die Werte in den logsichen Tabellen DELTED und INSERTED vergleichen (steht auch in obigem Artikel).
Gruß
Filipp
also wenn ich jetzt gerade keinen Hänger habe ist das auch ziemlich logisch. Wenn du BMDExport auf 0 setzt führst du ja ein Update durch, und jedes Update setzt BMDExport auf 1...
Und was man dagegen macht: Abfragen, was upgedated wurde. Und wenn es BMD... ist dann halt nicht umsetzen.
Zur Abfrage, ob eine Spalte akutalisiert wurde gibt es extra "IF UPDATE(column)", siehe z.B. http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx. Achtung: ich bin mir nicht ganz sicher, ob IF UPDATE nur "echte" Updates erkennt (sprich: der Wert wurde auch wirklich geändert) oder auch "unechte" (sprich: du hast ein UPDATE auf alle Zeilen durchgeführt, werden dann auch die als Upgedated angesehen, die bereits den gewünschten Wert hatten, bei denen der Wert also nicht mehr geändert wurde). Dann musst du u.U. noch die Werte in den logsichen Tabellen DELTED und INSERTED vergleichen (steht auch in obigem Artikel).
Gruß
Filipp
Moin SNo,
Nachfrage:
Gemäß einer der vielen bekannten Gesetzmäßigkeiten der IT-Branche liegt, wenn ein Problem länger als einen Monat ohne erkennbare Statusänderung offen ist, einer der folgenden Sachverhalte vor:
Welche der drei Varianten trifft denn bei Dir zu?
Bitte Feedback
Grüße
Biber
Nachfrage:
Gemäß einer der vielen bekannten Gesetzmäßigkeiten der IT-Branche liegt, wenn ein Problem länger als einen Monat ohne erkennbare Statusänderung offen ist, einer der folgenden Sachverhalte vor:
- das Problem konnte mit der vorgeschlagenen Lösung behoben werden
- das Problem ist vergessen, weil niemand mehr danach gefragt hat
- das Problem ist gegenstandslos, da der zuständige Problemlöser inzwischen die Firma gewechselt hat
Welche der drei Varianten trifft denn bei Dir zu?
Bitte Feedback
Grüße
Biber