der Trigger triggert nur bei einzelen Datensätzen

25/07/2008 - 16:27 von Christian Stueben | Report spam
Hallo allerseits,
ich habe folgendes Problem mit einem Trigger.

In der Tabelle ausstehende_bestaetigungen ist der Trigger:
ALTER TRIGGER ausstehende_bestaetigungen_delete

ON dbo.ausstehende_bestaetigungen

after delete

AS

declare @ui uniqueidentifier

select @ui = ui from deleted

delete from uiwegweiser where ui = @ui



Wenn ich einen Datensatz in ausstehende_bestaetigungen lösche, wird auch der
abhàngige Datensatz in der Tabelle uiwegweiser gelöscht. Wenn ich aber in
austehende_bestaetigungen mehrere Datensàtze auf einmal lösche,
beispielsweise mit delete from ausstehende_bestaetigungen where ablaufdatum
< @parmablaufdatum, werden zwar alle betroffenen Datensàtze in
ausstehende_bestaetigungen gelöscht, in uiwegweiser wird allerdings nur ein
Datensatz gelöscht.



Was làuft falsch? Wie erreiche ich, daß auch bei ganz ganz vielen
Datensàtzen alle korrespondierenden aus uiwegweiser weggeputzt werden?
Rekursive Trigger sind erlaubt.



sqlserver2000, w2k3.



Danke im Voraus!

Chris
 

Lesen sie die antworten

#1 Thomas Schremser
25/07/2008 - 16:36 | Warnen spam
Hallo Christian!

Trigger werden nicht pro Datensatz aufgerufen, d.H. wenn Du mehrere
Datensàtze löschst, wird er nur einmal aufgerufen und inserted/deleted
enthalten alle relevanten Datensàtze.

select @ui = ui from deleted

delete from uiwegweiser where ui = @ui



Ändere das hier auf

DELETE FROM uiwegweiser
WHERE ui IN
(
SELECT ui
FROM deleted
)


Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler

Ähnliche fragen