在数据库中自动生成编号的实现方法分享

所属分类: 数据库 / MsSql 阅读数: 1303
收藏 0 赞 0 分享
在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的!看下这个Demo:
  1.建立这样的简单的表Test.
  
  2.设置字段id的自增.
     
  3.表添加数据
  insert into Test(name) values('TestName')
  insert into Test(name) values('TestName')
  insert into Test(name) values('TestName')
  4.你会看到
  
  5.在这里我们删除id为2的行.就只剩下了id为1和id为3的两行数据了.(不上图了)
  6.再添加一条数据.
  insert into Test(name) values('TestName')
  我们会发现这或许不是我们想要的结果了
  
  为什么没有id为2的呢?    之后任你死命的加,也不会有id为2的数据行了!

这样的设计固然方便,但是魔鬼在于细节,这篇博客就是为了解决这个问题让我们重新见到id为2的数据行(这里顺便改进一下,让结果不只是显示id为2这样的int,假如有一天我们的各户要求我们他们要一个5位数的id号吗,从00000开始,OK,这没问题)

1.主角登场,存储过程终于派上了用场了
复制代码 代码如下:

Create procedure [dbo].[insertName]
(@name nvarchar(50))
as
begin
declare @i int
set @i=1
while(@i<10000)
begin
if exists(select convert(int,id) from numbertest where convert(int,id)=@i)
begin
set @i=@i+1
continue
end
else
begin
insert numbertest values(right('0000'+convert(varchar(5),@i),5),@name)--这里的两个数字'5' 就是我们要设置的id长度                      
break
end
end
end

2.用SQL 语句调用这个存储过程
  execute insertName Test
  你可以狂按几次,几十次,几百次,我们要的数据加进去了,
  
  我们可以删除指定的id数据行,当我们再次进行添加的时候,之前被删掉的id行,将会被我们新添加的数据所覆盖,这样id就都可以连接起来了.
  哦,对了,还没有说如何显示的是 '0' 开头的呢?这个简单,将id的数据类型设置为nvarchar(5),就是这么简单!呵呵!  
总结:
  这里我们调用了存储过程,存储过程不宜多用,但是有的时候还真是用起来很方便,本文章对于刚刚工作的童鞋们应该还是有点帮助的吧,好好学习吧,生活很美好!
  如释重负的感觉啊,终于搞定一个问题,在这里感谢帮助我的童鞋们! 下次再会!
更多精彩内容其他人还在看

浅析SQL Server 聚焦索引对非聚集索引的影响

本篇文章对SQL Server的聚焦索引和非聚集索引进行简单分析,从而总结出聚焦索引对非聚集索引的影响。有兴趣的朋友可以看下
收藏 0 赞 0 分享

浅析SQL Server的聚焦使用索引和查询执行计划

本文通过介绍默认使用索引、强制使用聚集索引、强制使用非聚集索引让我们知道对于检索所有列结果集使用主键的聚集索引是最佳选择。有兴趣的朋友可以看下
收藏 0 赞 0 分享

详解SQL Server中的数据类型

本文主要讲解了SQL中的数据类型以及几个需要注意的地方,简短的内容,深入的理解。有兴趣的朋友可以看下
收藏 0 赞 0 分享

浅析SQL Server的分页方式 ISNULL与COALESCE性能比较

本文上述重点讲述了SQL Server的分页方式,COALESCE和ISNULL函数区别之处,简短的内容,深入的理解。有兴趣的朋友可以看下
收藏 0 赞 0 分享

浅述SQL Server的聚焦强制索引查询条件和Columnstore Index

本文主要讲了强制使用索引条件来进行查询,当对于使用默认创建索引进行查询计划时觉得不是最优解,可以尝试使用强制索引来进行对比找出更好得解决方案。简短的内容,深入的理解.有兴趣的朋友可以看下
收藏 0 赞 0 分享

详解SQL Server的聚焦过滤索引

本文主要讲解了通过过滤索引来提高查询性能,同时也给出了其不同的场景以及其使用优点和明显的缺点。简短的内容,深入的理解,有兴趣的朋友可以看下
收藏 0 赞 0 分享

解析SQL Server聚焦移除(Bookmark Lookup、RID Lookup、Key Lookup)

本文主要讲解索引性能优化,着重对Bookmark Lookup、RID Lookup、Key Lookup三者进行移除的实现进行解析,以此来提高查询性能。希望对大家有所帮助
收藏 0 赞 0 分享

SqlServer 注释符 单行注释与多行注释

这篇文章主要介绍了SqlServer 注释符 单行注释与多行注释,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL设置SQL Server最大连接数及查询语句

今天遇到了关于Sql Server最大连接数(Max Pool Size)的问题,后来通过查找一些资料解决了,所以想着总结下关于SQL Server最大连接数的内容,所以这篇文章主要介绍了SQL设置SQL Server最大连接数与查询语句,有需要的朋友们可以参考借鉴。
收藏 0 赞 0 分享

浅谈SQL Server交叉联接 内部联接

本文主要讲了SQL Server的交叉联接和内部联接,同时也给出了使用需要注意的地方。有需要的朋友可以看下
收藏 0 赞 0 分享
查看更多