流水號自動補號和計算所缺最小號和最大號

2022-03-02 04:45:51 字數 2826 閱讀 2670

--

自已做標識列的例子,不自動重排編號,而是自動補號:

--建立得到最大id的函式

create

function

f_getid()

returns

char(3

)asbegin

declare

@idint

ifnot

exists

(select

1from

tb whereid=

'001')

set@id=1

else

begin

select

@id=

max(id) 

from

tbif

@idis

null

set@id=1

else

begin

declare

@id1

intselect

@id1

=min

(id) 

from

tb a 

where

id<>

@idand

notexists

(select

1from

tb whereid=

a.id+1

)if@id1

isnot

null

set@id

=@id1

set@id

=@id+1

endend

return

(right('

000'

+cast

(@id

asvarchar),3

))end

go--

建立表create

table

tb(id 

char(3

) primary

keydefault

dbo.f_getid(),name 

varchar(10

))go

--插入記錄測試

insert

into

tb(name) 

values('

張三')insert

into

tb(name) 

values('

張四')insert

into

tb(name) 

values('

張五')insert

into

tb(name) 

values('

張六')insert

into

tb(name) 

values('

張七')insert

into

tb(name) 

values('

張八')insert

into

tb(name) 

values('

張九')insert

into

tb(name) 

values('

張十')--

顯示插入的結果

select

*from

tb--

刪除部分記錄

delete

from

tb where

name in(

'張三',

'張七',

'張八',

'張十')

--顯示刪除後的結果

select

*from

tb--

再次插入記錄

insert

into

tb(name) 

values('

李一')insert

into

tb(name) 

values('

李二')--

顯示插入的結果

select

*from

tb order

byid

go--

刪除環境

drop

table

tbdrop

function

f_getid

/*--測試結果

id   name       

---- ---------- 

001  李一

002  張四

003  張五

004  張六

005  李二

007  張九

(所影響的行數為 6 行)

--*/

另外一種計算缺號的演算法

---最小

--select min(b+1) as lostnum from a where (not ((b+1) in (select b from a)))

select

min(a+1

) as

lostnum 

from

t where

(not

((a+1) 

in(select

a from

t)))

---最大

--select max(b-1) as lostnum from a where (not ((b-1) in (select b from a)))

select

max(a-1

) as

lostnum 

from

t where

(not

((a-1) 

in(select

a from

t)))

SQL自動生成流水號

select convert char 6 getdate 12 下面的 生成長度為8的編號,編號以bh開頭,其餘6位為流水號。得到新編號的函式 create function f nextbh returns char 8 asbegin 從表裡得到最大值加個1000001就增乙個1 return...

通過SQL自動新增流水號

專案中往往有一些單據流水號或者流程流水號是希望通過新增一條記錄後自動產生乙個編號的,比如新增一條流程就自動根據當前日期自動新增該流程的流程流水號,下面介紹兩種不同型別流水號通過sql自動產生的方法。流水號格式 第一種 數值型別 日期 流水號,比如 201104190001 201104190002 ...

自動生成業務單據流水號方案

我們在開發管理軟體的時候,常常遇到流水號 單據號 登記號 自動生成 控制和管理的問題。由於流水號 具有唯一性和連續性的特點,在實際開發過程中若處理不好,會產生流水號重複及斷號的問題。特別是多個併發用 戶同時儲存一張同樣的業務單據時,系統會返回多個相同的流水號。筆者以前在開發企業erp系統的時候,就曾...