2009-05-11 12 views
1

J'ai une table appelée hl7_lock dans SQL Server avec ces colonnes:SQL Server 2005 Supprimer Trigger sélectionnez des déclarations supprimées null

hl7_id lock_dtm lock_user

J'ai 3 triggers sur la table pour UPDATE, INSERT et DELETE

La table n'est jamais mise à jour, mais le déclencheur INSERT fonctionne parfaitement. Cependant cette suppression trigger met de temps en temps un enregistrement dans hl7_lock_log avec une hl7_id nulle

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()) 

Les autres champs insérés avec succès, mais hl7_id est nulle. Les enregistrements supprimés n'ont pas de hl7_id nul.

Nous avons installé SQL Server SP 2 au cours du week-end, mais cela n'a pas amélioré la situation. Quelqu'un at-il vu ce comportement dans un déclencheur SQL Server. Des conseils sur la façon de réparer mon déclencheur? Est-ce que cela se produit lorsqu'un seul enregistrement est supprimé ou lorsque plusieurs enregistrements sont supprimés?

Répondre

6

le déclencheur échouera si plus d'un enregistrement est supprimé.

vous devriez faire quelque chose comme ceci:

insert dans hl7_lock_log (user_name, action, hl7_id, dtm) sélectionnez SYSTEM_USER, 'Supprimer', hl7_id, getdate() de supprimer

1

Êtes-vous Assurez-vous que les enregistrements sont dans le tableau 'deleted'? Si une instruction delete est exécutée sur votre table principale qui supprime les enregistrements zéro, il semble que votre code ci-dessus sera toujours inséré dans votre journal de verrouillage.

Peut-être que vérifier si des enregistrements ont été supprimés avant l'insertion résoudrait le problème. Comme Thirster le signale également, vous devrez ajuster plusieurs enregistrements en cours de suppression dans une seule instruction.

Questions connexes