Pour récupérer la valeur d'une colonne auto incrémenté dans SQL Server on dispose de 3 méthodes :
Pour trouver quoi utiliser et quand, je vous laisse voir les documentation associées.
Pour ma part, j'ai pris l'habitude d'utiliser SCOPE_IDENTITY(), mais récemment, je me suis retrouvé bloqué par un INSERT dans une vue avec un trigger INSTEAD OF qui fait que le contexte d'insertion est différent du context d'appel et donc qui fait que SCOPE_IDENTITY() renvoie NULL ;-(
Du coup pour ne plus se faire avoir (nouvelle grande décision), maintenant j'utilise l'instruction ci dessous plus longue mais marche dans plus de cas :
DECLARE @id INT;
SELECT @id = COALESCE(SCOPE_IDENTITY(), @@Identity);
Bien sûr il faut remettre cette astuce dans le seul contexte ou l'on ne veut insérer qu'une seule ligne à la fois.
Il faut utiliser une clause OUTPUT si plusieurs lignes vont être insérées en une seule opération.
Enjoy !
Aucun commentaire:
Enregistrer un commentaire