Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir l'ID du dernier enregistrement inséré - Accéder au champ d'identité DAO, ODBC, SQL Server 2008

Autant que je sache @@IDENTITY ne fonctionne pas pour les insertions basées sur le curseur. DAO et ADO utilisent tous deux des curseurs dans les coulisses.

Après avoir .Update l'enregistrement, vous devriez pouvoir récupérer la valeur d'identité simplement en lisant la valeur.

Ce qui suit fonctionne bien pour moi via un jeu d'enregistrements ADO ouvert avec la sémantique Keyset :

r.Update
Debug.Print r("ItemID")

Ce qui suit fonctionne bien pour moi via un jeu d'enregistrements DAO ouvert avec la sémantique Dynaset :

r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")

Vous devriez éviter .Requery et .MoveFirst , vous introduisez des problèmes de concurrence. Considérez :

Dim r as DAO.Recordset, db as DAO.Database
Set db = CurrentDb
Set r = db.OpenRecordset("SELECT TOP 1 * FROM item ORDER BY ItemID DESC", dbOpenDynaset, dbSeeChanges)
r.AddNew
''// Set field values here
r.Update
''// At this point another user adds a new record
r.Requery
r.MoveFirst ''// ORDER BY ItemID DESC means that you're going to see the new user's row
Debug.Print r("ItemID")