SQL Server : Bug sur le SCOPE_IDENTITY() et parallélisme enfin résolu après plus de 3 ans !
Ce bug est un vieux bug, à en juger par sa description sur le site Connect qui date de 2008 avec un problème remonté sous SQL Server 2005.
https://connect.microsoft.com/SQLServer/feedback/details/328811/scope-identity-sometimes-returns-incorrect-value
Ce problème particulièrement grave, puisqu'il y a reste de renvoie d'une valeur erronée de l'Identity c'est-à-dire la dernière valeur affectée à une colonne de type compteur. Ce problème ne se produit que lorsqu'une insertion est faite avec un plan d'exécution parallélisé c'est-à-dire une requête très complexe.
Il existe plusieurs détournée de résoudre le problème :
- Utiliser la clause OUPUT lors la commande INSERT, qui elle ne subit pas ce bug
- Ne pas utiliser le parallélisme en forçant le MAXDOP à 1 (au niveau serveur ou de la requête)
Ces 2 solutions sont expliquées ici sur le site de support de Microsoft : http://support.microsoft.com/kb/2019779
Sinon la bonne nouvelle est que ce bug est corrigé… Dans SQL Server 2012 !
Ok ce dernier n'est pas encore en version finale, mais sa sortie est pour très bientôt… En attendant reste à espérer que Microsoft sortira un correctif pour les autres versions, ce qui a l'air assez improbable tant le temps est déjà passé depuis la que le bug sous Connect a été marqué comme résolu.
En attente de SQL Server 2012…
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :