如何取得SQL中自增伴位的下一个值
一般來說, 俱有 identity 屬性欄位的 table 的目前值可以很容易地利用 max 函數來取得. 不過, 也很有可能 max 該筆資料已被刪除了, 所以利用 max 查找出來的結果不正確.
但又若是要找出下一個 identity 的值呢? 就一定得知道漸增量 (increment) 為何了, 否則是沒有辦法計算出來的.
請先參考這篇文章: SQL Server的Identity欄位使用/複製/重設 http://diary.tw/tim/65 , 這篇文章中也有提到有關取得目前的 identity 值的方式, 是利用 dbcc checkident('table_name', NORESEED) 來取回, 不過取回來的是文字訊息 (text message), 而不是很方便程式化, 若要滿足前面的需求, 包含取回 identity 目前值及下一個, 則有現成的函數可用:
- IDENT_CURRENT: 取出 identity 欄位的目前值
- IDENT_INCR: 取出 identity 欄位的漸增值
- IDENT_SEED: 取出 identity 欄位的起始種子
使用方式如下:
select IDENT_CURRENT('table_name')
這樣可以取出該 table_name table 中的 identity 欄位的目前值, 而下一個呢? 可以利用:
select IDENT_CURRENT('table_name') + IDENT_INCR('table_name')
這樣就可以順利取出來, 也就是拿目前值加上漸增值. 而且回傳的結果是一個 resultset 的方式將值傳回, 很方便應用於程式化的需求.
不過無論如何, 也請特別注意, 這種應用需求, 並非是要 developer 將值取出後再塞回去的, 因為 identity 欄位是由系統維護的, 而不是 developer (或說程式) 維護的, 所以這樣取出是可以拿來觀察, 而不是要塞回去用的, 請特別注意一下.
select Case when (Select Count(*) from 表名)=0 then IDENT_CURRENT('表名') else IDENT_CURRENT('表名')+IDENT_INCR('表名') end