生成規則 HFR+Code+Date
這是生成的主鍵編號
HFR-xxx-20150101
HFR-xxx-20150104
HFR-xxx-20150109
HFR-xxx-20150111
HFR-xxx-20150112
當Code和Date重復時就在後面加字母區分
HFR-xxx-20150101
HFR-xxx-20150101A
HFR-xxx-20150101B
HFR-xxx-20150101C
HFR-xxx-20150101D
超過26個字母就這樣
HFR-xxx-20150101Z
HFR-xxx-20150101ZA
.....
HFR-xxx-20150101ZZA
....
HFR-xxx-20150101ZZZA
如果後面是數據就好辦了,但字母就有點難處理了
注意考慮並發情況
建一個輔助表SubCode(No,Code)
,內容
No Code
-- ----
0 <-Code為空字符串
1 A
2 B
...
26 Z
27 ZA
...
以下為SQL Server的例子
DECLARE @key varchar(20)
DECLARE @lastKey varchar(20)
DECLARE @subCode varchar(4)
DECLARE @no int
-- 編號前綴
SET @key = 'HFR-xxx-20150101'
-- 求最大編號
SELECT @lastKey = MAX([key]) FROM table1
IF (@lastKey IS NOT NULL)
BEGIN
-- 最大子編號
SET @subCode = SUBSTRING(@lastKey,LEN(@key)+1,4)
SELECT @no = No FROM SubCode WHERE Code = @subCode
-- 下個子編號
SELECT @subCode = Code FROM SubCode WHERE No = @no + 1
-- 拼接
SET @key = @key + @subCode
END
/*
ELSE 直接使用編號 @key
*/
-- 並發只能用編號唯一引發錯誤,重試
INSERT INTO table1([key],...)
VALUES(@key,...)