Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obter ID do último registro inserido - acessar DAO, ODBC, campo de identidade do SQL Server 2008


Até onde eu sei @@IDENTITY não funciona para inserções baseadas em cursor. O DAO e o ADO usam cursores nos bastidores.

Depois de .Update o registro, você deve ser capaz de obter o valor de identidade de volta simplesmente lendo o valor.

O seguinte funciona bem para mim por meio de um conjunto de registros ADO aberto com semântica de conjunto de chaves:
r.Update
Debug.Print r("ItemID")

O seguinte funciona bem para mim por meio de um DAO Recordset aberto com a semântica do Dynaset:
r.Update
r.Bookmark = r.LastModified
Debug.Print r("ItemID")

Você deve evitar .Requery e .MoveFirst , você está introduzindo problemas de simultaneidade. Considerar:
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")