select @@identity的应用(得到刚插入数据的ID)
来源:刑发明的空间 时间:2009-09-10 11:24:00
使用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