Update Trigger für Slowly Changing Dimension unter sql 2008

Termos

Mitglied
Hallo Leute,

ich bastel gerade an einem Trigger der einen Datensatz kopieren soll, neu einfügen und in beiden Datensätzen spalten ändert.
(SQL Server 2008)
Ausgangs Tabelle:

Personal

Name Abteilung seit bis alt
Mitarbeiter 1 x 1.1.2010 1.1.2999 NULL



Wird jetzt ein UPDATE auf die Tabelle durchgeführt, soll geprüft werden was verändert wurde.
Ist es die Abteilung dann Kopiere den Datensatz, setze bis auf aktuelles Datum und alt auf 1

Ist alt bereits 1 oder eine andere Spalte wurde geändert, dann soll nichts passieren



die Neue Tabelle sieht dann wie folgt aus:


Name Abteilung seit bis alt
Mitarbeiter 1 x 1.1.2010 1.1.2011 1
Mitarbeiter 1 y 1.1.2011 1.1.2999 NULL



Mein Problem ist es abzufangen ob die Spalte schon geändert wurde.



Momentan sieht mein Trigger so aus

SQL:
CREATE TRIGGER SCD
ON [SCD-PERSONAL]
AFTER UPDATE
AS BEGIN

	UPDATE [SCD-PERSONAL]
	SET Bis = GETDATE(), alt=1
	FROM [SCD-PERSONAL] s
	INNER JOIN inserted i ON s.personal = i.personal
	INNER JOIN deleted d ON s.personal = d.personal
	WHERE s.abteilung <> i.abteilung
	AND s.abteilung <> d.abteilung
	AND s.alt <> 1
	
	
	INSERT [SCD-PERSONAL] (Personal,Name, Eintritt, Austritt, seit, bis, alt) SELECT Personal,Name, Eintritt, Austritt, GETDATE(), bis, 1 from deleted

END


versuche mich gerade an einem IF ELSE :/
 
SQL:
CREATE TRIGGER SCD
ON [SCD-PERSONAL]
AFTER UPDATE
AS 
BEGIN

    DECLARE @dummyvariable boolean 
    SELECT @dummyvariable= (SELECT alt FROM scd-personal WHERE <hier Deine Bedingung>)
   BEGIN

   IF @dummyvariable= '1'

 
    UPDATE [SCD-PERSONAL]
    SET Bis = GETDATE(), alt=1
    FROM [SCD-PERSONAL] s
    INNER JOIN inserted i ON s.personal = i.personal
    INNER JOIN deleted d ON s.personal = d.personal
    WHERE s.abteilung <> i.abteilung
    AND s.abteilung <> d.abteilung
    AND s.alt <> 1
    
    
    INSERT [SCD-PERSONAL] (Personal,Name, Eintritt, Austritt, seit, bis, alt) SELECT Personal,Name, Eintritt, Austritt, GETDATE(), bis, 1 FROM deleted
 
  END
 BEGIN 
 IF @dummyvariable= <nächster Fall>
.
.
.
END
END

Ist ungetestet, sollte aber klappen.
 

Neue Beiträge

Zurück