2010-11-20 4 views
0

i ont déclencheur dans SQLServer sur la table (onglets)déclencheur de mise à jour

Create TRIGGER Trig_TabsUp 
on Tabs 
For UPDATE 
AS 
insert into tabs_Update select * from deleted 

le tableau tabs_update les mêmes que les onglets, mais le champ d'identité dans les onglets ne sont pas dans l'identité tabs_update juste int. Il me donne cette erreur

les valeurs de ligne updateed effacé ou ne font pas la ligne unique ou les alter lignes multiples 2 rangées

j'ai essayé de mettre un champ d'identité à la table Tabs_Update mais toujours la même erreur

Répondre

0

Je suppose que vous avez une clé primaire ou une contrainte unique sur le champ ID. C'est un problème la deuxième fois que vous mettez à jour le même enregistrement. Sp_help Tabs_update vous dira ce qu'ils sont.

Vous avez eu raison de faire le champ ID juste et int. Mais vous devez probablement ajouter un champ Mettre à jour l'heure et faire de la clé primaire un composite de l'ID et mettre à jour l'heure.

Faire aussi select * est presque toujours considéré comme une mauvaise idée. Votre déclencheur va se casser si vous ajoutez un nouveau champ et oubliez d'ajouter la table de mise à jour. Il se cassera également si vous changez l'ordre des champs.

+0

Avoir le déclencheur rompre si la définition de la table de base change, mais la table d'audit n'est pas une mauvaise chose ici IMO. C'est mieux que l'alternative où les définitions de base et de table d'audit ne sont pas synchronisées. –

+0

@Martin Malheureusement, il ne peut pas rompre tout de suite. Dans un cas j'ai expérimenté il a fallu un certain temps après que la table de base ait changé avant que les erreurs aient commencé à se produire. Certains ont émis l'hypothèse que le déclencheur ne s'est pas recompilé tout de suite. En raison de cela, il a fallu un certain temps avant que le problème soit résolu. C'était bien pire que certaines données non vérifiées. Mais je peux le voir dans les deux sens –

+0

Une vue était-elle impliquée? Vous avez peut-être dû exécuter 'sp_refreshview' –

1

Essayez d'ajouter SET NOCOUNT ON à la définition de votre déclencheur.

+0

+1. Pourquoi oh pourquoi n'est ce pas le défaut ... – gbn

Questions connexes