在数据库中自动生成编号的实现!

本文介绍了一种利用存储过程解决数据库中ID自增冲突的方法,通过创建存储过程实现ID的自定义生成,确保每个插入的记录都有唯一的ID,并能适应不同长度的需求。此外,文章还提供了如何处理ID为特定值的数据以及显示以'0'开头的ID的解决方案。
  一直很讨厌存储过程,没想到今天帮了我大忙啊,或许会因为今天让我慢慢喜欢上存储过程吧,不多说了,切入正题!
  在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的!看下这个Demo:
  1.建立这样的简单的表Test.
  2011042716520239.jpg
  2.设置字段id的自增.
      2011042716522087.jpg
  3.表添加数据
  insert into Test(name) values('TestName')
  insert into Test(name) values('TestName')
  insert into Test(name) values('TestName')
  4.你会看到
  2011042716542780.jpg
  5.在这里我们删除id为2的行.就只剩下了id为1和id为3的两行数据了.(不上图了)
  6.再添加一条数据.
  insert into Test(name) values('TestName')
  我们会发现这或许不是我们想要的结果了
  2011042716573584.jpg
  为什么没有id为2的呢?    之后任你死命的加,也不会有id为2的数据行了!
  这样的设计固然方便,但是魔鬼在于细节,这篇博客就是为了解决这个问题让我们重新见到id为2的数据行(这里顺便改进一下,让结果不只是显示id为2这样的int,假如有一天我们的各户要求我们他们要一个5位数的id号吗,从00000开始,OK,这没问题)
  1.主角登场,存储过程终于派上了用场了
 
01Create procedure [dbo].[insertName]
02(@name nvarchar(50))
03as
04begin
05    declare @i int
06    set @i=1
07    while(@i<10000)
08    begin
09        if exists(select convert(int,id) from numbertest where convert(int,id)=@i)
10        begin
11        set @i=@i+1
12        continue
13        end
14        else
15        begin
16        insert numbertest values(right('0000'+convert(varchar(5),@i),5),@name)--这里的两个数字'5' 就是我们要设置的id长度                      
17            break
18        end
19    end
20end
  2.用SQL 语句调用这个存储过程
  execute insertName Test
  你可以狂按几次,几十次,几百次,我们要的数据加进去了,
  2011042717053457.jpg
  我们可以删除指定的id数据行,当我们再次进行添加的时候,之前被删掉的id行,将会被我们新添加的数据所覆盖,这样id就都可以连接起来了.
  哦,对了,还没有说如何显示的是 '0' 开头的呢?这个简单,将id的数据类型设置为nvarchar(5),就是这么简单!呵呵!  
  总结:
  这里我们调用了存储过程,存储过程不宜多用,但是有的时候还真是用起来很方便,本文章对于刚刚工作的童鞋们应该还是有点帮助的吧,好好学习吧,生活很美好!
  如释重负的感觉啊,终于搞定一个问题,在这里感谢帮助我的童鞋们! 下次再会!

转载于:https://www.cnblogs.com/520wife/archive/2011/10/27/2226309.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值