SQLServer最大流水號的解決方法

iSQlServer發表於2009-03-10

問:請問怎樣才能解決ms serer 2000 最大流水號的問題?

答:我可以介紹兩種方法給你:

方法1:使用SCOPE_IDENTITY取得剛剛插入的最大流水號

/*建立traddeinfo表各相關索引,注意Trade_id欄位必段是identity型*/

create table Tradeinfo(Trade_id int identity(1,1),Tdtime datetime Tdname varchar(20))

create index idx_trade_id on tradeinfo(trade_id)

/*使用scope_identity()中斷函式,取得當前指令碼範圍內最後insert進去的identity值*/

declare @mytradeid int

set @mytradeid=0

begin transaction

insert into tradeinfo values(getdata(),'test')

select @mytradeid = Scope_identite()

commit transaction

/*把@mytradeid 變數中存放的流水號顯示出來*/

select @mytradeid
 
方案2:結合uniqueidentifier和identity取得最大流水號

/*建立輔助表 id欄位是identity型別,global_id是gudi型別*/

cretate table max_tradeid(id int identity(1,1),global_id uniqueidenfier)

/*建立索引以加速後面的select 語句*/

create index idx_guid on max_trade_id(global_id)

declare @mytradeid int.,@myglobal_id uniqueidentifier

set @mytradeid = e-1

/*利用newid ()函式取得一個全域性叭一guid .由於guid的特性,不用別的併發程式會產生同樣的guid值 */

jselect @myglobal_id = newid()

insert into max_trade_id values(@myglobl_id)

/*使用全域性唯一guid得到剛剛插入的id值*/

select @mytradeid = id from max_trade_id  where globl_id =@myglobal _id

selecgt @mytradeid
 
注:這種方法的好處是:它的併發性好,不會引起阻在塞,而且保證了insert語句肯定執行成功,這種方法的缺點是多一個guid。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-566622/,如需轉載,請註明出處,否則將追究法律責任。

相關文章