Triggerfrage: Bei Änderung bestimmter Spalten in Tabelle A eine neue Zeile in Tabelle B

MysterioJN

SQL-Guru
Beiträge
158
Hallo zusammen,

Ziel soll es sein, bei bestimmten Feldern eine Historie / Dokumentation zu führen.

Bzw neuer Denkansatz / Frage:

Kann man bei einer Änderung in egal welcher Spalte nur die Änderung unter Einbeziehung der rowid = PIDX der Änderungstabelle protokolieren als z.B. Variabel mit entsprechender Spaltenbezeichnung?


Mein aktueller Trigger-Versuch sieht wie folgt aus:

Code:
USE [aid_Medien]
GO
/****** Object:  Trigger [dbo].[MedStamm_HistorieTrigger]    Script Date: 19.03.2018 10:33:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[MedStamm_HistorieTrigger] on [dbo].[MedStamm]
AFTER Update

AS DECLARE @VarPIDX INT,
           @VarImVertrieb BIT,
       @VarImVertriebUser nvarchar(50),
       @VarImVertriebAb datetime,
       @VarAusVertriebAb datetime,
       @VarImVerkauf BIT,
       @VarImVerkaufUser nvarchar(50),
       @VarImVerkaufAb datetime,
       @VarAusVerkaufAb datetime,
       @VarMedTraeger_PIDX int,
       @VarVeroeffentlicht bit,
       @VarVeroeffentlichtUser nvarchar(50),
       @VarAuflageIst int


SELECT @VarPIDX = upd.PIDX FROM DELETED upd;
SELECT @VarImVertrieb = upd.ImVertrieb FROM DELETED upd;
SELECT @VarImVertriebUser = upd.ImVertriebUser FROM DELETED upd;
SELECT @VarImVertriebAb = upd.ImVertriebAb FROM DELETED upd;
SELECT @VarAusVertriebAb = upd.AusVertriebAb FROM DELETED upd;
SELECT @VarImVerkauf = upd.ImVerkauf FROM DELETED upd;
SELECT @VarImVerkaufUser = upd.ImVerkaufUser FROM DELETED upd;
SELECT @VarImVerkaufAb = upd.ImVerkaufAb FROM DELETED upd;
SELECT @VarAusVerkaufAb = upd.AusVerkaufAb FROM DELETED upd;
SELECT @VarMedTraeger_PIDX = upd.MedTraeger_PIDX FROM DELETED upd;
SELECT @VarVeroeffentlicht = upd.Veroeffentlicht FROM DELETED upd;
SELECT @VarVeroeffentlichtUser = upd.VeroeffentlichtUser FROM DELETED upd;
SELECT @VarAuflageIst = upd.AuflageIst FROM DELETED upd;


INSERT INTO MedStamm_Historie(
       MedStamm_PIDX
      ,ImVertrieb
      ,ImVertriebUser
      ,ImVertriebAb
      ,AusVertriebAb
      ,ImVerkauf
      ,ImVerkaufUser
      ,ImVerkaufAb
      ,AusVerkaufAb
      ,MedTraeger_PIDX
      ,Veroeffentlicht
      ,VeroeffentlichtUser
      ,AuflageIst
      ,ServerName
      ,ModDT)

VALUES (@VarPIDX,
           @VarImVertrieb,
       @VarImVertriebUser,
       @VarImVertriebAb,
       @VarAusVertriebAb,
       @VarImVerkauf,
       @VarImVerkaufUser,
       @VarImVerkaufAb,
       @VarAusVerkaufAb,
       @VarMedTraeger_PIDX,
       @VarVeroeffentlicht,
       @VarVeroeffentlichtUser,
       @VarAuflageIst,
    CAST( SERVERPROPERTY('ServerName') AS VARCHAR(50)),
    GETDATE());


Tatsächlich macht er auch was in der HistorienTabelle. Nur WAS versteh ich nicht nicht ganz.
Er macht bei jeder Änderung (egal in welcher Spalte - auch von nicht oben aufgeführten) 26 neue Datenzeilen...
Unbenannt.PNG

Wie ihr seht, hab ich einen Delete-Trigger versucht umzuwandeln in Update?!
Meine Deletetrigger klappen ganz gut. Aber von Update hab ich keine Ahnung wie man ja hier sieht.

 
Zuletzt bearbeitet:
Werbung:
Ok anders:

Wie müsste ein Trigger aussehen um geänderte Daten zu archivieren?

Als Beispiel:
die hergestellte Auflage (Spalte: AuflageIST) wurde von 8000 auf 9000 Stück geändert.
Jetzt soll mir der alte Wert 8000 in der Historientabelle gespeichert werden.

Wie bekomme ich das hin?
 
Zurück
Oben