Home site EPFL Windows.epfl.ch
Comment retrouver la valeur d'un champ AUTO-INCREMENT avec SQLServer?

Pour connaitre la valeur d'un champ "identity", donc qui s'auto-incrémente à chaque ajout d'un enregistrement, il faut utiliser la variable implicite @@IDENTITY de SQLServer. Elle s'utilise comme ceci (extrait du code de TroubleTickets):

strQuery = "INSERT INTO tTickets (...) VALUES (...); SELECT @@IDENTITY AS 'Identity' FROM tTickets"
set rs = conn.Execute(strQuery).NextRecordset
newID = rs("Identity")

Le truc c'est de faire, dans la même requête, l'instruction INSERT et une instruction SELECT, en séparant ces deux instructions SQL par un point-virgule.

Ensuite il faut exécuter la requête et sur le résultat de cette exécution faire immédiatement un .NextRecordset pour demander le résultat de la partie "SELECT @@..." de la requête.

On ne peut pas faire plus simple à ma connaissance.

Normalement ce code devrait fonctionner avec .Net, bien que je n'ai pas encore essayé. Si jamais le code compact ci-dessus ne fonctionne pas il est possible de décomposer comme ceci:

'1. construire la requête INSERT:
strQuery = "INSERT INTO tTable..."   '*seulement* le INSERT

'2. Exécuter la requête INSERT:
conn.Execute(strQuery)

'3. Lire la nouvelle valeur identity dans un nouveau recordset:
set rsNewID = conn.Execute("SELECT @@IDENTITY FROM tTable")

'4. Lire la valeur identity:
newID = rsNewID(0)

Ceux qui désirent plus d'infos peuvent faire une recherche avec le mot-clé "@@identity" dans MS Technet.

Happy coding!
FG


Article N° 95 du 28.03.2002 13:38:45 par François Georgy -- Permalink : http://windows.epfl.ch/?article=95