2010-08-19 132 views
0

我這樣做:sql server:我如何獲取插入的最後一條記錄?

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) 

,這是不正常。它返回NULL

+0

可能重複[scope_identity()question](http://stackoverflow.com/questions/3526851/scope-identity-question) – 2010-08-19 23:11:32

回答

3

它不工作,因爲你的更新和你的第二個執行是在不同的範圍。 您可能希望SELECT IDENT_CURRENT('tablename')

+0

它的一個好點,但我不認爲它的權利。我把範圍標識放在WITH子句中,並且仍然返回NULL返回 – 2010-08-19 23:13:43

+0

它表示範圍函數需要0個參數 – 2010-08-19 23:15:00

+1

不,您的更新被稱爲它自己的執行。然後你打電話給第二次執行以獲得身份。 imho,SCOPE_IDENTITY()在存儲過程中最爲有用,它必須一次全部發生。 使用「與rs」並不意味着「在這方面做」全部或全部「 – Matthew 2010-08-19 23:15:08

1

IDENT_CURRENT在單用戶環境中很好。

當您更新時,您已經記錄在案。

.Update 
lTheNewID = .Fields("ThisTableID") 

lTheNewID將保存新記錄的值。

+0

我有多用戶 – 2010-08-20 15:31:58

+0

除非你在存儲過程中使用它,否則我會避免它。 – JeffO 2010-08-20 17:43:38

+0

我同意Jeff O,正如我的回答中所述。我會考慮使用存儲過程來確保所有事務都發生;並且生成的ID是你在找什麼。 – Matthew 2010-08-20 22:49:03

相關問題