国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQlSERVER生成唯一編號

2024-07-21 02:47:20
字體:
來源:轉載
供稿:網友
SQlSERVER生成唯一編號

基數表-用來存儲編號前綴和類型

建表如下

CREATE TABLE [dbo].[SerialNo]([sCode] [varchar](50) NOT NULL,[sName] [varchar](100) NULL,[sQZ] [varchar](50) NULL,[sValue] [varchar](80) NULL, CONSTRAINT [PK_SerialNo] PRIMARY KEY CLUSTERED ([sCode] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

這個表需要手動添加你的前綴

例如:

存儲過程代碼:

 1 Create procedure [dbo].[GetSerialNo]    2 (    3    @sCode varchar(50)    4 )    5   6   as  7   8 --exec GetSerialNo    9  10 begin 11  12    Declare @sValue  varchar(16),   13 14            @dToday   datetime,           15 16            @sQZ  varchar(50)  --這個代表前綴 17  18    Begin Tran     19  20    Begin Try   21  22      -- 鎖定該條記錄,好多人用lock去鎖,起始這里只要執行一句update就可以了 23     --在同一個事物中,執行了update語句之后就會啟動鎖 24      Update SerialNo set sValue=sValue where sCode=@sCode   25  26      Select @sValue = sValue From SerialNo where sCode=@sCode   27  28      Select @sQZ = sQZ From SerialNo where sCode=@sCode   29 30     -- 因子表中沒有記錄,插入初始值--基數據必須手動去創建   31  32     If @sValue is null   33  34      Begin 35  36        Select @sValue = convert(bigint, convert(varchar(6), getdate(), 12) + '000001')   37  38        Update SerialNo set sValue=@sValue where sCode=@sCode   39  40      end41      42    else   43  44      Begin               --因子表有記錄   45  46        Select @dToday = substring(@sValue,1,6)   47 48       --如果日期相等,則加1   49 50        If @dToday = convert(varchar(6), getdate(), 12)   51  52          Select @sValue = convert(varchar(16), (convert(bigint, @sValue) + 1))   53 54       else              --如果日期不相等,則先賦值日期,流水號從1開始   55  56         Select @sValue = convert(bigint, convert(varchar(6), getdate(), 12) +'000001')   57  58           59 60        Update SerialNo set sValue =@sValue where sCode=@sCode   61 62      End 63  64      Select result = @sQZ+@sValue     65  66      Commit Tran   67  68    End Try   69  70    Begin Catch   71  72      Rollback Tran   73  74      Select result = 'Error' 75  76    End Catch   77 78 end 

執行:exec dbo.GetSerialNo 'CUS'

結果:CUS150413000001

此方法可用作生成流水號,使用update啟動數據庫鎖,并發不會重復,可讀性比較好,當然使用GUID就另當別論了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善盟| 云阳县| 西盟| 西城区| 景德镇市| 南宁市| 东源县| 汉源县| 丹棱县| 保亭| 城市| 湖南省| 巴楚县| 庆安县| 松潘县| 克什克腾旗| 卢氏县| 巫山县| 蒙城县| 德化县| 永济市| 青河县| 永川市| 德安县| 裕民县| 涿鹿县| 璧山县| 腾冲县| 界首市| 鹤峰县| 吴旗县| 北辰区| 富锦市| 怀集县| 双峰县| 湘潭市| 房山区| 厦门市| 北宁市| 鄂州市| 酉阳|