zoukankan      html  css  js  c++  java
  • SQL SERVER存储过程生成字母+数字的编码

      公司内设备管理系统中设备建账功能,功能目的是对新进设备进行记录并入库。其中设备编号一项定义为自己修改(查看之前的设备号,取一个不重复的值来填写),感觉特别麻烦!用存储过程自动生成编码岂不是更效率。

       需求:根据设备组代码(PC)+递增数字,构成编码,编码中数字必须为三位数,无三位数的,以‘0’占位。

        代码如下: 

     1 --测试数据库准备
     2 use master
     3 go
     4 if exists(select * from dbo.sysdatabases where name='hzf')
     5 drop database hzf
     6 go
     7 create database hzf
     8 go
     9 use hzf
    10 go
    11 --创建测试表
    12 ALTER proc [dbo].[get_new_id] 
    13     @new_id varchar(16) output,    --生产的编号
    14     @number int,                --设置编码数字的最大位数
    15     @group varchar(5)            --编号字母
    16 as
    17 begin
    18  
    19     set @new_id = null
    20      
    21     select top 1 @new_id = ID from test_id where id like @group+'%' order by convert(int,RIGHT(id,LEN(id)-len(@group)) ) desc
    22      
    23     if @new_id is null
    24         set @new_id = @group+REPLICATE('0',2)+'1'
    25     else
    26         begin
    27             declare @big varchar(16)
    28             set @big = convert(int, RIGHT(@new_id,LEN(@new_id)-len(@group)) )+1 
    29             if @big <100
    30             begin
    31                 set @big = REPLICATE('0',3-LEN(@big)) + @big
    32             end
    33             set @new_id = @group + @big 
    34         end
    35      
    36  
    37 end
    38  
    39 GO
    40  
    41 --测试
    42 declare @test int
    43 set @test=1
    44 while(@test<=20)
    45 begin
    46     declare @new_id    varchar(14)
    47     exec get_new_id @new_id output,7,'PC'
    48     insert into test_id values(@new_id)
    49     set @test = @test+1
    50 end
    51 select * from test_id

     

  • 相关阅读:
    算法 quick sort
    非常多学ThinkPHP的新手会遇到的问题
    原创jQuery插件之图片自适应
    管理线程之向线程函数传递參数
    [LeetCode]94.Binary Tree Inorder Traversal
    数据库基本概念
    Eclipse4.4 安装java反编译插件Eclipse Class Decompiler
    广义线性模型
    代理模式
    多态之中的一个(继承和虚函数)
  • 原文地址:https://www.cnblogs.com/wshzf/p/3741661.html
Copyright © 2011-2022 走看看