Récupérer la valeur de IDENTITY avant insertion

Récupérer la valeur de IDENTITY avant insertion - SQL/NoSQL - Programmation

Marsh Posté le 19-06-2008 à 14:50:01    

bonjour,
j'ai une table sous SQL Server contenant un champ id_employe IDENTITY. Donc ce champ s'incrémente automatiquement.
Après insertion, il suffit de faire SELECT @@IDENTITY pour avoir la valeur du dernier champ id_employe inséré.
 
Mais comment faire pour connaître la valeur que prendra le prochain champ id_employe ? Est-ce possible ?  
merci de votre aide.

Reply

Marsh Posté le 19-06-2008 à 14:50:01   

Reply

Marsh Posté le 19-06-2008 à 16:32:04    

j'en doute. si tu veux savoir (donc gérer) la prochaine valeur, tu ne dois pas passer par le type identity... qui est là pour se gérer tout seul, et donc t'es pas censé le connaître
 
ps : utilise scope_identity() le @@identity n'est absolument pas safe ! (le jour où t'as un trigger sur ta table, ça te retournera pas la bonne valeur)


Message édité par MagicBuzz le 19-06-2008 à 16:33:02
Reply

Marsh Posté le 19-06-2008 à 16:34:26    

si tu veux utiliser un type qui ne génère pas de collisions pour une PK, utiliser le type GUID (Globally Unique IDentifier)
 
tu le génères depuis ton programme avant de faire l'insertion, et pas de souci, ça 1 chance sur quelque chose comme le nombre d'atomes sur la terre de provoquer une collision.
-- Edit : Même pas en fait, puisque dans les dernières version la date est stockée dans le chiffre, ce qui voudrait dire que tu génères 2^(128-6-60-1) GUID dans l'espace de 100 nanosecondes pour atteindre la demi-vie ^^
 
Y porte pas son nom pour rien, c'est juste une valeur aléatoire parmi [0-2^128[
En réalité, 122 sont réellement recaclulés à chaque fois (6 pour la version et la variante) et 60 pour le timestamp qui a une précision de 100 nanosecondes (ou alors des valeurs aléatoires, ça dépend de la version utilisée en fait)
Par contre c'est chiant à taper au clavier, ça ressemble à ça :D
{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
 
RFC
http://tools.ietf.org/html/rfc4122


Message édité par MagicBuzz le 19-06-2008 à 16:49:07
Reply

Marsh Posté le 19-06-2008 à 16:39:09    

ok merci.
pour le type GUUID, je verrai, mais ça risque d'être difficile car ma base est déja bien remplie, et l'application est déjà avancée.
je change aussi le @@identity, j'ignorais que c'était déconseillé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed