`

sql语句 求最小可用Id

阅读更多
sql语句 求最小可用Id

select id+1 newtestid from test a where not exists (select 1 from test where id=a.id+1) order by id

使用说明:
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条是空的

转载自:http://hi.baidu.com/ykphp/blog/item/d84a6eb464ae67778bd4b21d.html
分享到:
评论

相关推荐

    Sql语句求最小可用id

    Sql语句求最小可用id

    经典SQL语句大全

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    经典全面的SQL语句大全

    经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制...

    超实用sql语句

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    Mysql查询表中最小可用id值的方法

    先把 sql 语句扔出来 // 这条语句在id没有1时,不能得到正确的查询结果。 select min(id+1) from oslist c where not exists (select id from oslist where id = c.id+1); 刚开始看到这条查询语句,完全是一脸懵X的...

    sql经典语句一部分

    经典SQL语句大全 一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice ...

    数据库操作语句大全(sql)

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    绿色 Sql Server 原理及全新管理工具

    一般情况下,正常安装sql server之后,master等系统数据库的路径都是被设置为绝对路径,如果要改正数据库的路径为相对路径,可以使用以下SQl语句: sql:=format(&#39; update sysaltfiles set filename=&#39;%s&#39;...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    mysql官方中文参考手册

    13.6.2. 用于控制从服务器的SQL语句 13.7. 用于预处理语句的SQL语法 14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储...

    MYSQL中文手册

    8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. ...

    MySQL 5.1参考手册中文版

    8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. ...

    MySQL 5.1参考手册

    13.6.2. 用于控制从服务器的SQL语句 13.7. 用于预处理语句的SQL语法 14. 插件式存储引擎体系结构 14.1. 前言 14.2. 概述 14.3. 公共MySQL数据库服务器层 14.4. 选择存储引擎 14.5. 将存储引擎指定给表 14.6. 存储...

    MySQL5.1参考手册官方简体中文版

    8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysql...

    Oracle9i的init.ora参数中文说明

    说明: 在 SQL 语句中, 应避免使用繁琐的 NLS_SORT 进程。正常情况下, WHERE 子句中进行的比较是二进制的, 但语言比较则需要 NLSSORT 函数。可以使用 NLS_COMP 指定必须根据NLS_SORT 会话参数进行语言比较。 值范围:...

    mysql5.1中文手册

    怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 ...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    当然也可用FTP工具.直接在IE浏览器地址栏输入ftp://www.域名/然后输入用户名和密码.同样可以上传.随时更新文件! 第三章 开发环境的说明与安装 3.1. 开发语言的选择 3.1.1. JAVA简介 Java是Sun公司推出的新的一代...

    cmd操作命令和linux命令大全收集

    ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping) ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息 tlist -t 以...

Global site tag (gtag.js) - Google Analytics