Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

ID des zuletzt eingefügten Datensatzes abrufen – Zugriff auf DAO, ODBC, SQL Server 2008-Identitätsfeld

Soweit mir bekannt ist @@IDENTITY funktioniert nicht für Cursor-basierte Einfügungen. DAO und ADO verwenden beide Cursor hinter den Kulissen.

Nachdem Sie .Update des Datensatzes sollten Sie in der Lage sein, den Identitätswert zurückzubekommen, indem Sie einfach den Wert lesen.

Folgendes funktioniert gut für mich über ein ADO-Recordset, das mit Keyset-Semantik geöffnet wurde:

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

Folgendes funktioniert bei mir über ein DAO-Recordset, das mit Dynaset-Semantik geöffnet wurde:

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

Sie sollten .Requery vermeiden und .MoveFirst , führen Sie Nebenläufigkeitsprobleme ein. Bedenken Sie:

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