2009-05-11 2 views
1

Ich habe eine Tabelle hl7_lock in SQL Server mit diesen Spalten genannt:SQL Server 2005 löschen Auslöser wählen aus gelöscht gibt null zurück

hl7_id lock_dtm lock_user

Ich habe 3-Trigger auf der Tabelle für UPDATE, INSERT und DELETE

Die Tabelle wird nie aktualisiert, aber INSERT-Trigger funktioniert einwandfrei. diese jedoch löschen Auslöser gelegentlich legt einen Datensatz in hl7_lock_log mit einem Null-hl7_id

SET NOCOUNT ON; 
declare @hl7_id decimal(18,0) 
select @hl7_id = hl7_id from deleted 
insert into hl7_lock_log (user_name, action, hl7_id, dtm)       
     values(system_user, 'Delete', @hl7_id,getdate()) 

Die anderen Felder erfolgreich eingesetzt werden, aber hl7_id ist null. Die gelöschten Datensätze haben keine Null hl7_id.

Wir haben SQL Server SP 2 über das Wochenende installiert, aber das hat die Situation nicht verbessert. Hat jemand dieses Verhalten in einem SQL Server-Trigger gesehen? Irgendwelche Tipps, wie ich meinen Auslöser reparieren kann?

Antwort

6

geschieht dies, wenn nur ein Datensatz gelöscht wird oder wenn mehrere Datensätze gelöscht werden? Der Trigger schlägt fehl, wenn mehr als ein Datensatz gelöscht wird.

sollten Sie etwas mehr tun, wie folgt:

Einsatz in hl7_lock_log (user_name, Aktion, hl7_id, dtm) wählen system_user, 'Löschen', hl7_id, getdate() von gelöschten

1

Sind Sie sicher, dass Datensätze in der "gelöschten" Tabelle sind? Wenn eine Löschanweisung in Ihrer Haupttabelle ausgeführt wird, die Nullsätze löscht, sieht es so aus, als ob der obige Code weiterhin in Ihr Sperrprotokoll eingefügt wird.

Vielleicht überprüfen, ob es Datensätze gibt, die vor dem Einfügen gelöscht wurden, um das Problem zu lösen.

Wie auch Thirster hervorhebt, müssen Sie mehrere Einträge in einer einzigen Anweisung löschen.