Moin,
als erstes Mal löscht diese Anweisung alle Datensätze der Tabelle:
SQL-Code:
delete from xmlbuffer
where id in (
select first 500 id from xmlbuffer
)
Das passiert deshalb, weil für jeden Datensatz separat nachgeguckt wird, ob er sich in den ersten 500 befindet. Dies ist immer der Fall, da der zuvor gelöschte Datensatz ja in der neuen Ergebnismenge nicht mehr vorkommt.
Deinen Deadlock erhälst Du also vermutlich, weil Du einer anderen Transaktion da Datensätze unter dem Allerwertesten klaust.
Vermeiden kannst Du das, indem Du den 500. Datensatz ermittelst und dann alle DS <= diesem löschst.
Das hat also nichts mit Deinen Triggern zu tun.
Aber dazu mal die Frage: Warum diese Verrenkung? Ist ein COUNT zu langsam?
Auf diese Weise die Anzahl der Datensätze vorzuhalten ist zumindest ungewöhnlich.
Gruß
Thomas