sqlserver 实现伪序列
生活随笔
收集整理的這篇文章主要介紹了
sqlserver 实现伪序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?在sqlserver生成對應格式的訂單號 比如 P + 年月日+業務ID +序列。?
訂單號規則有兩種:
單號生成規則:P+當天日期(年月日)+零售商注冊序號+0000;
單一商品訂單流水號: P+當天日期(年月日)+批發部注冊序號+零售商注冊序號+0000
思路
? 1. 生成 0000 --> 9999之間的偽序列
? ? ?a. 新建一張序列表?
? ? ?b. 模擬oracle中的序列自增長
? 2. 用偽序列 ?+ 規則生成訂單號
創建 序列表 ?
1 create table seqTable --序列表 2 ( 3 sellerId int, 4 buyerId int, 5 createDate varchar(20), --日期 6 curSeqNo varchar(20) --當前序號 7 )生成序列過程
1 /* 2 獲取序列 3 */ 4 create procedure getSeqNo(@sid int, -- 賣家店鋪ID 5 @bid int, -- 買家店鋪ID 6 @res varchar(20) output 7 ) -- 返回序列號 00001 8 as 9 10 declare @curSeqNo varchar(20), -- 序列號 11 @curSysDate varchar(20), -- 系統日期 12 @curNo int -- 序列 13 14 set @curSysDate = CONVERT(varchar(100), GETDATE(), 112); 15 if (@bid is null) 16 return ('-1') 17 18 -- 賣家、買家的ID都不空 19 if (@bid is not null and @sid is not null) 20 select @curSeqNo = curSeqNo from seqTable where sellerId=@sid and buyerId=@bid and createDate=@curSysDate 21 else 22 select @curSeqNo = curSeqNo from seqTable where buyerId=@bid and createDate=@curSysDate 23 24 -- 創建新的序列 25 if (@curSeqNo is null) 26 begin 27 set @curSeqNo = '0001'; 28 insert into seqTable(sellerId, buyerId, createDate,curSeqNo) 29 values (@sid, @bid,@curSysDate,@curSeqNo); 30 end 31 else 32 begin 33 set @curNo = cast(@curSeqNo as int); 34 set @curNo = @curNo + 1; --遞增 35 set @curSeqNo = REPLACE(STR(@curNo, 4), ' ', '0'); --格式化字符串 36 if (@bid is not null and @sid is not null) 37 update seqTable set curSeqNo = @curSeqNo where sellerId=@sid and buyerId=@bid and createDate=@curSysDate; 38 else 39 update seqTable set curSeqNo = @curSeqNo where buyerId=@bid and createDate=@curSysDate 40 end 41 set @res = @curSeqNo; 42?
獲取訂單號的過程
1 /* 2 單號生成規則:P+當天日期(年月日)+批發部注冊序號+零售商注冊序號+0000; 3 單一商品訂單流水號: P+當天日期(年月日)+批發部注冊序號+零售商注冊序號+0000+0000。 4 */ 5 6 create procedure getCurBillNo(@prefix varchar(20), 7 @sid int, --賣家店鋪ID 8 @bid int, --買家店鋪ID 9 @billNo varchar(1000) output --訂單號 10 ) 11 12 as 13 declare @res varchar(100),@seqNo varchar(100),@curSysDate varchar(100) 14 15 if(@bid is null) 16 return('-1') 17 18 set @curSysDate = CONVERT(varchar(100), GETDATE(), 112); 19 20 if (@prefix is null) 21 set @res ='P'; 22 else 23 set @res = @prefix; 24 25 if(@sid is not null) 26 begin 27 execute getSeqNo @sid, @bid,@seqNo output 28 set @res = @res + @curSysDate+cast(@sid as varchar) + cast(@bid as varchar) + @seqNo; 29 end 30 else 31 begin 32 execute getSeqNo @sid, @bid,@seqNo output 33 set @res = @res +@curSysDate +cast(@bid as varchar) + @seqNo; 34 end 35 set @billNo = @res; 36?
?
?
?
?
這里的程序,沒有考慮 并發性,以及性能。僅僅是學習使用
?
轉載于:https://www.cnblogs.com/awq-nice/archive/2012/08/22/2650098.html
總結
以上是生活随笔為你收集整理的sqlserver 实现伪序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UML建模之业务处理模型(Busines
- 下一篇: IOS 小技巧