sno
Goto Top

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

Content-Key: 117582

Url: https://administrator.de/contentid/117582

Printed on: April 20, 2024 at 02:04 o'clock

Member: filippg
filippg Jun 06, 2009 at 15:18:36 (UTC)
Goto Top
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
Member: Biber
Biber Jul 06, 2009 at 06:45:19 (UTC)
Goto Top
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:

  • 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