sql >> Base de Datos >  >> RDS >> Sqlserver

Obtener ID del último registro insertado:acceso a DAO, ODBC, campo de identidad de SQL Server 2008

Que yo sepa, @@IDENTITY no funciona para inserciones basadas en cursor. DAO y ADO usan cursores detrás de escena.

Después de .Update el registro, debería poder recuperar el valor de identidad simplemente leyendo el valor.

Lo siguiente funciona bien para mí a través de un Recordset ADO abierto con la semántica Keyset:

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

Lo siguiente funciona bien para mí a través de un DAO Recordset abierto con la semántica de Dynaset:

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

Debes evitar .Requery y .MoveFirst , está introduciendo problemas de concurrencia. Considere:

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")