2010-08-19 2 views
0

que je fais ceci:SQL Server: comment puis-je obtenir le dernier enregistrement qui a été inséré?

With rs 
    .AddNew ' create a new record 
    ' add values to each field in the record 
    .Fields("datapath") = dpath 
    .Fields("analysistime") = atime 
    .Fields("reporttime") = rtime 
    .Fields("lastcalib") = lcalib 
    .Fields("analystname") = aname 
    .Fields("reportname") = rname 
    .Fields("batchstate") = bstate 
    .Fields("instrument") = instrument 
    .Update ' stores the new record 
End With 

' get the last id 
Set rs = cn.Execute("SELECT SCOPE_IDENTITY()", , adCmdText) 

cela ne fonctionne pas correctement. il retourne NULL

+0

duplication possible de [scope_identity() question] (http://stackoverflow.com/questions/3526851/scope-identity-question) –

Répondre

3

Cela ne fonctionne pas car vos mises à jour et votre seconde exécution sont dans des portées différentes. Vous pouvez choisir SELECT IDENT_CURRENT ('tablename')

+0

c'est un bon point, mais je ne pense pas que ce soit juste. J'ai mis l'identité de la portée dans la clause WITH et toujours obtenir la valeur NULL –

+0

il est dit que la fonction de portée nécessite 0 arguemnts –

+1

Non, votre mise à jour est appelée son propre exécuter. Ensuite, vous appelez une seconde exécution pour obtenir l'identité. imho, SCOPE_IDENTITY() est très utile dans les procédures stockées qui doivent se produire en même temps. L'utilisation de "with rs" ne signifie pas "faire tout ou rien" à cet égard – Matthew

1

IDENT_CURRENT est très bien dans un environnement mono-utilisateur.

Vous êtes déjà sur la notice lors de la mise à jour.

.Update 
lTheNewID = .Fields("ThisTableID") 

lLeNewID contiendra la valeur du nouvel enregistrement.

+0

J'ai des multi-utilisateurs –

+0

Sauf si vous l'utilisez dans un proc stocké, je l'éviterais – JeffO

+0

Je suis d'accord avec Jeff O, comme indiqué dans ma réponse.Je considérerais utiliser une procédure stockée pour assurer que toutes les transactions se produisent, et l'ID qui en résulte Qu'est-ce que vous cherchez. – Matthew

Questions connexes