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?
Grüße,
Mesaou
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 370812
Url: https://administrator.de/contentid/370812
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
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
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