设为首页
收藏本站
最新电影
> 子栏目 Asp | Jsp | XML | XSL | Div+Css | 自定义函数 | 数据库 | 脚本特效
您现在的位置: 首页=>后台技术=>数据库 订阅本栏目  
sql语句 求最小可用Id
时间: 2007-12-12 17:04:42 阅读次数:4343


sql语句 求最小可用Id

select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1) order by id
飞飞A.sp技术乐园

使用说明:
1.先看where not exists,每条记录,都会进行 where id=a.id+1判断

2.where id=a.id+1 这个的判断结果,就是5,6,7,9,如果没有8,就会返回8

3.外面的A表 现在是1,里面就判断,有没有2,
外面的A表 现在是2,里面就判断,有没有3,
....
外面的A表 现在是7,里面没有8,返回8了

4.select 1就是返回一个1,表示存在

5. 使用案例:
1,2,3,4,5,6,7,8,9
有一天,老板把8这条记录删掉了,下次添加的时候,不想添加10,而想用回8这个记录

6.此sql语句的缺点:
如果序列中,1,2,3,4,5,6.... 老板把1删掉了,它是算不出1来的
原因:因为它用ID+1,1被删了的话,第一条就是2了,ID+1就去判断有没有3了

7.同理,如果序列中1,2,3,4,5,6,7,8,9,老板把前面的6个都删掉了,也求不出来

8.解决办法:解决的办法就是:另写一段代码,先判断有没有1这条记录,就OK了

建表以及添加数据、语句测试、删除前几项Id语句测试的sql脚本【sql server2000】

--创建test表
create table test
(
id int identity primary key nonclustered,
content varchar(50) not null default ''

)
go
--表创建结束
--添加数据
declare @i int
set @i=1
while @i<10
begin
set nocount on
insert into test(content) values(@i)
set @i=@i+1
end
--添加结束
--查询所有数据
select * from test
--删除第八条(随便删除一条)
delete from test where id=8
--测试求最小可用Id
select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1) order by id
--删除前两条数据
delete from test where id<=2
--重新测试
select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1)
--解决无法测试第一条是否已删除的办法
select top 1 id from test
--可以测试出第3条开始的 所以前2条是空的






站内搜索    

下一篇Microsoft SQL Server 2005 Service Pack 3(sqlserver2005 sp3)微软官方下载地址

上一篇数据类型详解 MSSQL

本栏目最新 栏目最新列表
access由于您和其他用户试图同时改变同一数
Microsoft SQL Server 2005 Service Pack 3
MySQL时间戳转换的方法
清除,删除表中数据的方法
mysql常用时间函数用法解释
网站优化策划 栏目最新列表
增加网站外链的快速方法
网站上线前必做的30个检查
新的友情链接参考标准(没有google的PR情况
优化Google的AdSense广告的五个工具
王通讲SEO八大基础
站点最新 站点最新列表
微博推广的一些技巧
xhEditor v1.1.7 发布,
收集的一些轻量级非常实
50个新鲜兼容最新版本的
javascript中cookie的设
Excel中出现#VALUE!、#D
jquery插件:飞飞表情插件
十个使用HTML5开发的精彩
支持HTML5的浏览器有哪些
飞妮莫属:漫画:如何写出
历史最热10条信息  
MIME介绍 及 [1] [2] [3]
巧用Google和迅雷来下载
Transact SQL 常 [1] [2]
VIA Rhine II Fast Ethe
电脑常用端 [1] [2] [3]
Do you get a kick out
十道羊皮卷 欣赏+mp3版+
每日一句:A friend and
每日一句:Theres no tu
经典__悟透JavaScript
 width= 
伟哥博客 西安房产 123最新电影 三四六四