SQL中自己做标识列 (邹建原创)
来源:互联网 发布:域名历史查询 编辑:程序博客网 时间:2024/05/18 01:41
如果使用系统的identity,会出现这样一种情况:当删除了一条记录,再增加一条新记录时会导致新增记录的id是记录中最大id+1.这样在现存的记录中id出现间断!所以,自己做一个标识列,目的就是弥补不足,出现上面情况时id自动更新,并连续。
注意:标识列是不允许修改其值的,所以如果你要实现删除后自动重排,就不能用标识列,否则会带来很多麻烦
--创建得到最大id的函数create function f_getid()returns intas begin declare @id int select @id=max(id) from tb set @id=isnull(@id,0)+1 return(@id) endgo--创建表 create table tb(id int default dbo.f_getid() primary key,name varchar(10)) go--创建触发器,在删除表中的记录时,自动更新记录的id(**如果不要此功能,则删除此触发器) create trigger t_delete on tb AFTER delete as declare @id int,@mid int select @mid=min(id),@id=@mid-1 from deleted update tb set id=@id,@id=@id+1 where id>@mid go--插入记录测试 insert into tb(name) values('张三') insert into tb(name) values('张四') insert into tb(name) values('张五') insert into tb(name) values('张六') insert into tb(name) values('张七') insert into tb(name) values('张八') insert into tb(name) values('张九') insert into tb(name) values('张十')--显示插入的结果 select * from tb--删除部分记录 delete from tb where name in('张五','张七','张八','张十')--显示删除后的结果 select * from tb--删除环境 drop table tb drop function f_getid/*--测试结果id name ----------- ----------1 张三2 张四3 张五4 张六5 张七6 张八7 张九8 张十(所影响的行数为 8 行)id name ----------- ----------1 张三2 张四3 张六4 张九(所影响的行数为 4 行)--*/
转自:http://www.cnblogs.com/youzhangjin/archive/2009/05/17/1458854.html
- SQL中自己做标识列 (邹建原创)
- Sql 中自己做标识列
- SQL中标识列与普通列的转换
- sql 标识列
- SQL标识列初探
- SQL标识列初探
- SQL标识列初探
- 标识列(sql)
- SQL Server 标识列
- Sql标识列
- sql列转标识列
- SQL Server中Identity标识列的重新设置
- 在 SQL Server 中让标识列从新开始计数
- SQL Server中关于标识列的使用说明
- SQL Server中关于标识列的使用说明
- sql 2008中标识列循环自增的实现
- 漫谈SQL Server标识列
- 漫谈SQL Server标识列
- android 静音与振动
- SQL字符串函数Stuff的一个用法
- Windows忘记mysql密码的解决方案
- 当使用lua_call时,请用lua_atpanic为其设置panic函数
- 不同的连接数据库方法及驱动
- SQL中自己做标识列 (邹建原创)
- HDU 1205 吃糖果(水)
- C++中SYSTEM的用法
- DIV+CSS基础培训
- STM32外部中断测试
- android悬浮窗--获取内存
- 使用dd命令增加swap大小
- Arm Linux bootloader 全程详解
- Android用单列模式来管理Activity,并实现完全退出