狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

ASP中獲取正在插入的記錄的ID值SQL語句和方法

admin
2010年12月13日 14:11 本文熱度 3448


在ASP網站開發中,我們經常遇到,需要把新插入的記錄的ID取出來,作為一個很重要的標識字段存到另一個表里。
    很傻的辦法是,instert以后,把插入值作為條件取查詢,但有時會出錯,因為不唯一,也有人會想到,查詢最大的那個ID“max(id)”,或者最頂上的那個ID,“select top1 id”,這些在單用戶下是可以的,但在多用戶操作時,很可能獲取到時別人的ID。


   什么方法最有效呢?如何才能有效獲取正在插入的記錄的ID值SQL語句和方法?下面用一個例子來說明方法。現在這里有張gisblogs_net這樣的表(創建代碼如下,sql server)


create table gisblogs_net
(
     id int identify(1,1) primary key not null,
     name varchar(50) null
)


下面時ASP獲取ID的代碼


dim sql,conn
dbuid="sa"     
dbpwd="sa123456"      
dbname="gisblogs.net"   
dbip="localhost"
conn="driver={SQL Server};server="&dbip&";uid="&dbuid&";pwd="&dbpwd& amp;";database="&dbname&""(連接字符串,ACCESS自己找一個)
sql="select * from gisblogs_net"
rs.open sql,conn,1,3
rs.addnew
rs("name")="測試"
rs.update
response.Write(rs("id"))
rs.close
set rs=nothing
set conn=nothing


該文章在 2010/12/13 14:11:13 編輯過

全部評論8

admin
2010年12月13日 14:11
找到一句可以獲得當前最新ID的語句,如下: 復制內容到剪貼板代碼: conn.execute("insert into member (user,code) values ('"&request.form("user")&"','"&request.form("code")&"')") set rs=conn.execute("Select SCOPE_IDENTITY()") newsid=rs(0) rs.close試過,確實能獲得最新ID,但是看了SCOPE_IDENTITY()相關介紹后還是有點不明白,語句中為什么寫“newsid=rs(0)”,其中的rs(0)是什么意思?我更換成“newsid=rs(1)”、“newsid=rs”都是什么都沒有。如果我想要獲取的不是ID而是別的列又要怎樣呢?

該評論在 2010/12/13 14:11:38 編輯過
admin
2010年12月13日 14:11
SCOPE_IDENTITY() SCOPE_IDENTITY()獲取的是最后一個字段的id select scope_identity() rs(0) 是索引 一般的sql "select id,name from table" rs(0)=rs("id") rs(1)=rs("name")

該評論在 2010/12/13 14:11:49 編輯過
admin
2010年12月13日 14:12
rs(0)是第一個字段的值,Select SCOPE_IDENTITY() 所以沒有rs(1)...

該評論在 2010/12/13 14:12:04 編輯過
admin
2010年12月13日 14:12
如果我想獲取多幾個最新值該怎么辦? 像是在select scope_identity()之后,希望能獲取最新的id 以及最新的name

該評論在 2010/12/13 14:12:28 編輯過
admin
2010年12月13日 14:12
那就查詢了

該評論在 2010/12/13 14:12:42 編輯過
admin
2010年12月13日 14:12
意思是select scope_identity()只能查詢到1個字段的值而不是一整行各個字段的值嗎?

該評論在 2010/12/13 14:12:51 編輯過
admin
2010年12月13日 14:13
首先你應當先去了解什么是identity類型。 簡單的說,這個類型是自增類型,所以只對整型類的數據有效。 再回過頭來看你的方法:scope_identity,獲取這種自增字段,那肯定就不可能把非自增類型的數據給索取出來了。 如果你還想把各個字段的值取出來,除了乖乖的檢索表之外無其他辦法。

該評論在 2010/12/13 14:13:13 編輯過
admin
2010年12月13日 14:14
對于sql server 2000來說,它提供了兩個全新的函數(ident_current,scope_identity),并且改進了@@identity的不足.當你插入新記錄后,可以調用函數:
print ident_current(table) 這將獲得新的identity值,不管數據庫中是不是有記錄添加(這就避免了@@identity的連接限制)
或者:print scope_identity() 這將獲得在當前存儲過程,觸發器等其他程序創建的最新記錄的identity值.
而全局變量@@identity有一個問題,當對一張表執行insert時,如果該表有觸發器程序在執行插入操作,然后,接著在另一張表中插入記錄,這樣返回@@identity值就是第二張表的identity值。
如果你用的不是sql server 2000,你最好一個簡單的存儲過程來解決這個問題。
create procedure myproc
@param1 int
as
begin
set nocount on
insert into sometable
(
intfield
)
values
(
@param1
)
set nocount off
select newid = @@identity
end
在asp中你可以這樣做:
<%
fakevalue = 5
set conn = server.createobject("adodb.connection")
conn.open "<conn string>"
set rs = conn.execute("exec myproc @param1=" & fakevalue)
response.write "new id was " & rs(0)
rs.close: set rs = nothing
conn.close: set conn = nothing
%>

該評論在 2010/12/13 14:16:19 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved