生成序列号

/**************************获得序列号格式:XXX0000XXXXX 如:LHY0000123456*************************/
/***************************注:此处ID范围为0~4294967295********************************************/
void __fastcall GetSerialnumber(char *dest,char *code,int codelen,unsigned int ID)
{
   char *pDest=new char[codelen+10];
   memset(pDest,0,codelen+10);
   memcpy(pDest,code,codelen);
   for(int i=codelen;i<codelen+10;++i)
   {
     pDest[i]+='0';
   }
   char sz[11]="";
   itoa(ID,sz,10);
   int len=lstrlenA(sz);
   memcpy(pDest+(codelen+10-len),sz,len);
   memcpy(dest,pDest,lstrlenA(pDest)+1);
   delete [] pDest;
}
//调用示例:
char serialnum[100]="";
char  *code="LHY";
unsigned int  ID=123;//可以是自动递增数
GetSerialnumber(serialnum,code,lstrlenA(sz),ID);


多个客户端同时操作数据库(如:新增用户编号)时需要保证生成编号不重复,下面是一个可支持并发操作的SQL Server存储过程

CREATE PROCEDURE GenerateID
@Code varchar(20),
@ID varchar(50) output
AS
/*启用事务控制并发编号不重复*/
BEGIN TRANSACTION
  declare @maxid int
  set @maxid=0
  select *from 会员信息表
  if @@rowcount>0
  begin
	declare @max varchar(50)
	select @max=max(会员编号) from 会员信息表
	select @maxid=right(@max,9) 
  end
    set @maxid=@maxid+1
    declare @j int
    set @j=9-len(@maxid)
    declare @i int
    set @i=0
    set @ID=@Code
    while @i<@j
    begin
    set @ID=@ID+'0';
    set @i=@i+1; 
    end
    
    set @ID=@ID+convert(varchar(20),@maxid)
    insert into 会员信息表(会员编号) values(@ID)
COMMIT
GO







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值