mesaou
Goto Top

Trigger auf View löst bei Änderung der Basistabelle nicht aus

Hallo,
ich habe Tante Google schon ausführlich befragt, sie möchte mir allerdings nicht weiterhelfen, oder ich stelle die falschen Fragen.
Mein Problem ist folgendes:
Ich habe einen View der mir drei Spalten einer Tabelle anzeigt. Auf diesem View sitzt ein Trigger (Instead of Update) der in drei Tabellen eine kleine Änderung dürchführt. Wenn ich in der Basistabelle einen Wert ändere, wird auch im View der Wert entsprechend geändert, so wie ich es auch erwartet hatte. Anders als erwartet löst diese Änderung den Trigger allerdings nicht aus. Eine manuelle Änderung im View löst den Trigger ganz normal aus.
Im View sind die drei Spalten MandNr, KundNr und eMail aus der Kunden-Tabelle vorhanden.
Das ganze ist aktuell noch eine Testeinrichtung.

Warte ich auf das falsche Ereignis?

ALTER TRIGGER [dbo].[UpdateView] 
   ON  [dbo].[Kunden_View]
   instead of UPDATE
AS 
BEGIN
	SET NOCOUNT ON;

	declare @eMail nvarchar(MAX);
	declare @MandNr nvarchar(MAX);
	declare @KundNr nvarchar(MAX);
	Select @eMail = i.email from inserted i
	Select @MandNr = i.MandNr from inserted i
	Select @KundNr = i.KundNr from inserted i
	Insert into dbo.KHKAenderungsverfolgung (dbo.Aenderungen.MandNr, dbo.Aenderungen.KundNr, dbo.Aenderungen.KundEMail)  Values (@Mandnr,@KundNr,@eMail)
	Update dbo.Kunden set eMail  = @eMail where dbo.Kunden.MandNr = @MandNr and dbo.Kunden.KundNr = @KundNr
	Update dbo.KundenOpt set KundEMailOpt  = @eMail where dbo.KundenOpt.MandNr = @MandNr and dbo.KundenOpt.KundNr = @KundNr
END

Grüße,
Mesaou

Content-ID: 370812

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

Ausgedruckt am: 24.11.2024 um 05:11 Uhr

MadMax
Lösung MadMax 11.04.2018 um 17:45:14 Uhr
Goto Top
Hallo Mesaou,

Du erwartest tatsächlich das Falsche. Der Trigger löst nur aus, wenn Du explizit ein Update auf die Sicht ausführst. Bei Datenänderungen in den Basistabellen passiert das nicht, auch wenn sich die Daten in der Sicht dadurch ändern.

Gruß, Mad Max
Mesaou
Mesaou 12.04.2018 um 08:38:21 Uhr
Goto Top
Hallo Mad Max,

danke dir erstmal^^. Gibt es eine Möglichkeit um auf die Änderung im View zu reagieren ohne einen Trigger auf die Basistabelle zu setzen?

Grüße,
Mesaou
MadMax
MadMax 12.04.2018 um 12:34:15 Uhr
Goto Top
Hallo Mesaou,

nicht, daß ich wüßte. Trigger werden ja durch Aktionen auf das Objekt, also in dem Fall die Sicht, ausgelöst, nicht durch Änderung der Daten in der Sicht. Es geht also tatsächlich nur über Trigger in den Basistabellen.

Aber wenn die drei Spalten eh alle in einer Tabelle sind, wo ist das Problem? Dann setzt Du den Trigger auf die Tabelle und läßt die gewünschte Aktion nur ausführen, wenn eine der drei Spalten aktualisiert wurde (if update (MandNr) or update (KundNr) or update (eMail) ...), dann ist Dein Problem doch gelöst, oder?

Gruß, Mad Max
Mesaou
Mesaou 12.04.2018 um 14:34:11 Uhr
Goto Top
Hallo Mad Max,

grundsätzlich kann man das so machen, nur komme ich leider nicht überall an die entsprechenden Tabellen (Herstellereinschränkung bei Fremdsoftware^^). Das Beispiel kommt aus meiner Testumgebung und da wäre das alles natürlich so möglich.

Grüße,
Mesaou