使用select @@identity 得到剛插入數據的ID
1.適用於所有 ADO 版本
<%Dim loConn, lsSQL, loRs
Set loConn = CreateObject("ADODB.Connection")
' 建立數據庫連結
loConn.Open "Provider=SQLOLEDB; Data Source=JACKIE; Initial Catalog=pubs; User ID=sa; PassWord= "
'新增一筆數據到數據庫內
lsSQL = "INSERT INTO tMembers (MemberName) VALUES ('Manohar')"
' 執行 SQL 敘述
loConn.Execute(lsSQL)
' 透過 @@IDENTITY 函數取得最後一筆數據的 Identity 字段值,並傳給 IIID 變量
lsSQL = "SELECT @@IDENTITY AS NewID"
Set loRs = loConn.Execute(lsSQL)
llID = loRs.FIElds("NewID").value
' 關閉數據庫連結
loConn.Close()
Set loConn = Nothing%>
2.適用於 ADO 2.0 以後的版本
<%
Dim loConn, lsSQL, loRs
Set loConn = CreateObject("ADODB.Connection")
' 建立數據庫連結
loConn.Open "Provider=SQLOLEDB; Data Source=JACKIE; Initial Catalog=pubs; User ID=sa; PassWord= "'
'新增一筆數據到數據庫內,並隨即取得 Identity 字段值
lsSQL = "INSERT INTO tMembers (MemberName) VALUES ('Manohar');" &_
"SELECT @@IDENTITY AS NewID;"
' 執行 SQL 敘述
Set loRs = loConn.Execute(lsSQL)
' 利用數據集合對象中的 NextRecordset() 方法將 SQL 敘述中的第二個敘述執行結果傳給loRs
' 變數
Set loRs = loRs.NextRecordSet() '這一條很重要,否則得不到想要的結果!!!!!!
' 將最後一筆數據的 Identity 字段值傳給 IIID 變量
llID = loRs.FIElds("NewID").value
' 關閉數據庫連結
loConn.Close()
Set loConn = Nothing
%>
3.適用於所有 ADO 版本
Dim loConn, lsSQL, loRs
Set loConn = CreateObject("ADODB.Connection")
' 建立數據庫連結
loConn.Open("DSN=myDSN;UID=something;PWD=Something;")
' 新增一筆數據到數據庫並取得取得最後一筆數據的 Identity 字段值
lsSQL = "SET NOCOUNT ON;" &_
"INSERT INTO tMembers (MemberName) VALUES ('Manohar');" &_
"SELECT @@IDENTITY AS NewID;"
' 執行 SQL 敘述
Set loRs = loConn.Execute(lsSQL)
' 將 Identity 字段值傳給 IIID 變量
llID = loRs.FIElds("NewID").value
' 關閉數據庫連結
loConn.Close()
Set loConn = Nothing
第二種方法跟第三種方法很像,只是在 SQL 敘述中多定義了一行 SET NOCOUNT ON,什麼叫做 SET NOCOUNT ON 呢?在 SQL 敘述中不會傳回數據集合對象的敘述 (例如:Insert, Delete, Update......等等)都會被 SET NOCOUNT ON 略過不計,只有那些會傳回數據集合的敘述才會被計算,在第三個范例中只有 "SELECT @@IDENTITY AS NewID; 這一段敘述才會被視做數據集合並被計算,於是乎我們可以以第三個方法延伸出第四種方式。
4.
<%
'一次新增兩筆數據進數據庫,並取得個別的 Identity 字段值
lsSQL = "SET NOCOUNT ON;" &_
"INSERT INTO tMembers (MemberName) VALUES ('John'); " &_
"SELECT @@IDENTITY AS NewID;" &_
"INSERT INTO tMembers (MemberName) VALUES ('Jane'); " &_
"SELECT @@IDENTITY AS NewID;"
' 執行 SQL 敘述
Set loRs = loConn.Execute(lsSQL)
' 取得第一筆資料的 Identity 並傳給IIID1 變數
llID1 = loRs.FIElds("NewID").value
' 取得第二筆資料的 Identity 並傳給IIID1 變數
Set loRs = loRs.NextRecordSet()
llID2 = loRs.FIElds("NewID").value