L'événement de table a un à la place du déclencheur, dont le but est de générer la clé primaire EventId en tant que Max + 1, le reste des colonnes est rempli à partir d'inséré.SQL Au lieu de déclencher ne déclenche pas parfois?
EventId est pas l'identité, et nous ne pouvons le faire identité il y a beaucoup de depedency là, la logique de déclenchement:
SELECT TOP 1 @ID = Event.EventID FROM Event
IF (@ID IS NULL)
BEGIN
SET @ID=1
END
ELSE
BEGIN
SELECT @ID = MAX(Event.EventID) FROM Event
SET @[email protected]+1
END
--Then just a insert statment with this id as EventId and rest of the columns from inserted table
Maintenant, parfois, quand je tente d'insérer dans cette table, il dit encore peut 't insert duplicate in eventId, Je ne sais pas pourquoi cela se produit ...
On dirait que la gâchette ne s'allume pas dans certains cas? Pourquoi
Donc, cela va ajouter un certain type de verrouillage là-bas, laissez-moi essayer cela ... – Lalit
Cela a fonctionné comme dieu, mais pourriez-vous s'il vous plaît expliquer quel était le problème avec la logique précédente. Est-ce à cause du verrou de table? – Lalit
@Lalit - pour être honnête, je résolvais (peut-être) le mauvais problème - je pensais que vous pourriez insérer plusieurs lignes dans la table dans une seule instruction 'INSERT'. Mais je crois que la réponse ci-dessus, car il s'agit de l'ensemble de la "recherche de MAX, élaborer de nouvelles valeurs d'identification basées sur elle, insérer de nouvelles valeurs" comme une déclaration unique - donc vous n'avez pas besoin de déblatérer avec verrouillage conseils ou changer les niveaux d'isolement. –