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

在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用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),就是这么简单!呵呵!  

总结:

  这里我们调用了存储过程,存储过程不宜多用,但是有的时候还真是用起来很方便,本文章对于刚刚工作的童鞋们应该还是有点帮助的吧,好好学习吧,生活很美好!

  如释重负的感觉啊,终于搞定一个问题,在这里感谢帮助我的童鞋们! 下次再会!

时间: 2024-10-28 06:47:46

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

ai-求OC中自动生成变量名的方法

问题描述 求OC中自动生成变量名的方法 如题 求大神指导.比如 char * a1="aaaaaaaa"; char * a2="bbbbbbb"; char * a3="ccccccccc"; ............ char * an="nnnnnnn"; 变量命名规则都是char * an n值是从1到n的数字,n我知道. 问题:如何依次遍历a1到an 想要类似如下的用法 for(int i=0;i<n;i++)

php根据数据id自动生成编号的实现方法_php实例

如下所示: <strong><span style="font-size:18px;">/*编号=年份后两位+月份+id四位数*/ $id = $this->student_model->save(0, $data); $sn = date('Y', time()); $sn = substr($sn, -2); $sn.= date('m', time()); $sn.=sprintf("%04d", $id);</spa

设置SQLServer数据库中某些表为只读的多种方法分享_MsSql

一般情况下会有几种情况需要你把数据库设为只读: 1. Insert,Update,Delete 触发器 2. Check 约束 和 Delete 触发器 3. 设置数据库为只读 4. 把表放到只读文件组中 5. 拒绝对象级别权限 6. 创建视图 在开始之前,先创建一个数据库及表作为示例: 复制代码 代码如下: create database MyDB create table tblEvents ( id int, logEvent varchar(1000) ) insert into tbl

设置SQLServer数据库中某些表为只读的多种方法分享

一般情况下会有几种情况需要你把数据库设为只读: 1. Insert,Update,Delete 触发器 2. Check 约束 和 Delete 触发器 3. 设置数据库为只读 4. 把表放到只读文件组中 5. 拒绝对象级别权限 6. 创建视图 在开始之前,先创建一个数据库及表作为示例: 复制代码 代码如下: create database MyDB create table tblEvents ( id int, logEvent varchar(1000) ) insert into tbl

看实例学VFP:向数据表中添加记录时自动生成编号

本例在"看实例学VFP:向数据表中添加记录并验证输入数据是否合法"的基础上进行了改进,实现了在添加记录时不仅能够完成对输入数据的校验,还具有自动生成编号的功能.自动生成编号的相关代码加在表单的init事件及"添加"按钮的click中,在表单第一次启动或添加完记录后都会调用此段代码,实现自动生成编号的功能.运行界面如下: 本例用到了"数据1"数据库中的"网站信息表",关于该数据库的情况已经在看实例学VFP:示例数据库一文中给出,

SQLServer中一个多用户自动生成编号的过程

server|sqlserver|过程 SQLServer中一个多用户自动生成编号的过程 if not exists (select * from dbo.sysobjects where id = object_id(N'[IndexTable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)create table IndexTable(Ex char(20), num integer) go create procedure SetIndex @

cvs 数据库 主键外键-CVS格式文件数据导入新数据库后自动生成主键外键

问题描述 CVS格式文件数据导入新数据库后自动生成主键外键 以前将数据库中的数据导出来了,后来手贱把给数据库毁了. 现在希望通过以前导出来的CVS文件数据恢复以前的数据库,最好是自动的,主键外键自动关联自动生成[里边表实在太多了]. 什么数据库都行,什么MySQL.SQLServer都可以,只求能重建以前的数据库啊! 不知道各位大神有没有可行的办法啊? 解决方案 没办法,只有数据.需要添加SQL语句

属性查询-hql中自动生成的通过一个属性和属性值查询记录的方法怎么改成通过一个属性和该属性的多个值查?

问题描述 hql中自动生成的通过一个属性和属性值查询记录的方法怎么改成通过一个属性和该属性的多个值查? 解决方案 hql中用and来合并条件

自动编码-无对象表定义的窗口如何自动生成编号

问题描述 无对象表定义的窗口如何自动生成编号 我做了一个是对应无对象表的窗口,但是编号要自己手动打,如何能实现自动生成编号呢,换一行就自动生成一个