Re: Funktion if update(Spalte) im Trigger???



Hallo Antje

versuch mal folgendes in einem Update-Trigger:

IF UPDATE(Status)
INSERT INTO Historie(TabId,Status)
SELECT d.TabId,d.Status
FROM deleted d INNER JOIN inserted i ON
d.TabId = i.TabID
WHERE d.TabId IN (SELECT d.TabId
FROM deleted d INNER JOIN inserted i ON
d.TabId = i.TabId
WHERE d.Status <> i.Status)

Hier sollten nur die tatsächlich geänderten Stati protokolliert werden.
Benutzername und Datum kannst du automatisch über Standardwerte mit in die
Historie schreiben.

HTH
Heiko

"Antje Kaiser" <AntjeKaiser@xxxxxxxxxxxxxxxxxxxxxxxxx> schrieb im
Newsbeitrag news:151E4722-9BAC-4D44-AA01-70483A18BFE9@xxxxxxxxxxxxxxxx
Hallo zusammen,
ursprünglich hatte ich folgende Zielstellung:
In einer Tabelle gibt es eine Spalte Status und wenn diese geändert wird,
dann soll in einer Historientabelle der alte Status mit Datum und Benutzer
gespeichert werden, so daß eine Statushistorie entsteht.
Nun dachte ich eigentlich ich hätte die Trigger- samt inserted und
deleted-Tabellen-Philosophie ganz gut verstanden. Nach der, so meinte ich,
kann in der Spalte Status der Tabelle inserted nur etwas enthalten sein,
wenn
diese geändert wurde, also im Update etwas neues hinzugefügt wurde. Dem
scheint aber nicht so zu sein.
Auf diese Weise, dachte ich, müßte folgender Code im Update-Trigger einer
Tabelle in der Historientabelle nur Wirkung zeigen, wenn auch der Status
geändert wurde.

-- hier gehe ich davon aus, daß eventuell mehrere Zeilen geupdatet werden
können, aber maximal eine Zeile sich im Status ändert
if (select count(*) from inserted where not Status is null) = 1
begin
set @id = (select PA_ID from inserted where not PA_Status is null)
set @attrid = (select PA_Status from inserted where not PA_Status is
null)
exec usp_SchreibeinHistorie @id, @attrid
end

Mache ich nun aber ein update in einer anderen Spalte der Tabelle schreibt
er mir sofort eine Historienzeile. Es geht also nicht.
Nun hab ich in der Hilfe sowas wie if update(Spaltenname) gefunden, und
weiß
jetzt nicht recht, auf welche Zeilen (falls es mehrere in der Tabelle
inserted sind) sich dessen Ergebnis bezieht. Kann mir das jemand erklären
oder hat noch jemand eine ganz andere tolle Idee wie ich zu einer Lösung
kommen kann.
Danke im voraus,
--
Gruß
Antje

.



Relevant Pages

  • Re: 3 SQL Abfragen in 1
    ... Die einzelnen Felder müssen nun mit dem Inhalt der SQL Abfrage gefüllt ... SELECT FPWRNr, maxas Erlaubt, maxas Verboten FROM ... (SELECT FPWRNr,'' As Erlaubt, FPWRLand as Verboten FROM tbFWPReise WHERE ...
    (microsoft.public.de.sqlserver)
  • Re: Freie Zimmer gesucht (aus datenbank)
    ... (SELECT id FROM bookings b WHERE ... roomno=r.id AND ...
    (de.comp.datenbanken.mysql)
  • Re: Problem mit einer SQL Abfrage
    ... FROM (SELECT * FROM A WHERE active is null) c ... LEFT JOIN (SELECT * FROM B where restituion is null) d ...
    (de.comp.datenbanken.mysql)
  • Re: =?ISO-8859-15?Q?G=FCltig_von/bis?=
    ... SELECT `TeamA-ID`, `TeamB-ID` ... FROM spiele ... WHERE GueltigVon < DATE_SUB, INTERVAL 1 DAY) ... WHERE Datum < NOW ...
    (de.comp.datenbanken.mysql)
  • Re: SQL-Patches verwalten
    ... IF NOT EXISTS (SELECT * FROM CONFIGTABLE WHERE ...) THEN ...
    (de.comp.datenbanken.misc)

Loading