用存储过程生成流水帐号问题

--创建测试表  
  create   table   usertable(userid   varchar(20),username   nvarchar(20))  
  go  
  --创建触发器  
  create   trigger   tg_insert   on   usertable  
  for   insert  
  as  
  declare   @username   nvarchar(20)  
  declare   @userid   varchar(20)  
  declare   @num   int  
  declare   @i   int  
  select   @userid=max(userid)   from   usertable   where   userid   like   'w'   +   convert(varchar(10),getdate(),112)   +   '%'  
  if   @userid   is   null  
        set   @userid='w'   +   convert(varchar(10),getdate(),112)   +   '000001'  
  else  
        begin  
            set   @num=cast(substring(@userid,10,6)   as   int)  
            set   @num=@num   +   1  
            set   @i=len(cast(@num   as   varchar(6)));  
            set   @userid='w'   +   convert(varchar(10),getdate(),112)  
            while(@i<6)  
            begin    
                set   @userid=@userid   +   '0';  
                set   @i=@i   +   1;  
            end              
            set   @userid=@userid   +   cast(@num   as   varchar(6))  
        end  
  select   @username=username   from   inserted  
  rollback  
  insert   into   usertable   values(@userid,@username)  
   
   
  go  
   
  --测试数据  
  insert   into   usertable(username)   values('aa')  
  go  
  insert   into   usertable(username)   values('bb')  
  go  
  insert   into   usertable(username)   values('cc')  
  go  
  --显示数据  
  select   *   from   usertable  
  go  
  --删除测试表  
  drop   table   usertable



CREATE   PROCEDURE   [dbo].[Sp_USERFLM]  
  @UserName   nvarchar(50)=null,  
  @UserPwd   nvarchar(50)=null  
  as  
  declare   @strNumber   nvarchar(50)  
  declare   @i   int ---循环因子  
   
  set   @i=1  
   
  --where   后面的条件是在同一年内,序号在原来基础上增加,到第二年,序号重新从1开始增加,  
  set   @strNumber=(   select   max(cast(right(UserID,7)   as   int))   FROM   USETABLE   where   SUBSTRING   (UserID   ,   2   ,   4   )=year(getdate()))  
  set   @strNumber=isnull(@strNumber,0)+1  
  while   (@i<7) --数字  
  begin  
  set   @strNumber='0'+@strNumber  
  set   @i=@i+1  
  end  
  --W+日期+数字  
  set   @strNumber='W'+convert(nvarchar(8),getdate(),112)+@strNumber  
   
  insert   into   USETABLE   values   (@strNumber,@UserName,@UserPwd)    
   
  GO  


CREATE   PROCEDURE   [dbo].[Sp_USERFLM]  
  @UserName   nvarchar(50)=null,  
  @UserPwd   nvarchar(50)=null  
  as  
  declare   @strNumber   nvarchar(50)  
  declare   @i   int---循环因子  
   
   
  --where   后面的条件是在同一年内,序号在原来基础上增加,到第二年,序号重新从1开始增加,  
  set   @strNumber=(   select   max(cast(right(UserID,7)   as   int))   FROM   USETABLE   where   SUBSTRING   (UserID   ,   2   ,   4   )=year(getdate()))  
  set   @strNumber=isnull(@strNumber,0)+1  
  while   (len(@strNumber)<8)--数字  
  begin  
  set   @strNumber='0'+@strNumber  
  end  
  --W+日期+数字  
  set   @strNumber='W'+convert(nvarchar(8),getdate(),112)+@strNumber  
   
  insert   into   USETABLE   values   (@strNumber,@UserName,@UserPwd)

你可能感兴趣的:(Go)