sql中自增列 id,删除其中一个 ,如何查找被删除的行??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中自增列 id,删除其中一个 ,如何查找被删除的行??相关的知识,希望对你有一定的参考价值。

如:自增列 1、2、3、4、5、6、7;

删除 其中一个数 X
求查询呗删除数X的 值 求SQL语句

参考技术A CREATE TABLE #test (
  id  int  identity(1,1),
  val int
);

INSERT INTO #test VALUES(101);
INSERT INTO #test VALUES(102);
INSERT INTO #test VALUES(103);
INSERT INTO #test VALUES(104);
INSERT INTO #test VALUES(105);
INSERT INTO #test VALUES(106);
INSERT INTO #test VALUES(107);
GO

SELECT * FROM #test
GO

id          val
----------- -----------
          1         101
          2         102
          3         103
          4         104
          5         105
          6         106
          7         107

(7 行受影响)


DELETE FROM #test WHERE  id = 2;
DELETE FROM #test WHERE  id = 5;
DELETE FROM #test WHERE  id = 6;
GO


SELECT
  M.number
FROM
  #test t  RIGHT JOIN  master..spt_values  M
    ON (M.number  = t.id)
WHERE
  M.type='P'
  AND M.number > 0
  AND M.number <= (SELECT MAX(id) FROM #test)
  AND t.id is null
GO

number
-----------
          2
          5
          6

(3 行受影响)

参考技术B

假设表名为t

是sqlserver吧?

select min(id)-1 from
(select row_number() over (order by id) rn,id from t) as tt
where rn<>id

 

替换一处表名

参考技术C 我觉得通过这一张表从效率上来讲比较难通过一条sql语句查询出来。
常用的方式是通过一张辅助表。
create table b(id number);
insert into b values(1);
insert into b values(2);
insert into b values(3);
....
insert into b values(7);
commit;

select b.id,a.id from a left join b on a.id=b.id where a.id is null;
参考技术D

数据多的话用WHILE循环吧﹐下面代码用循环加LEFT JOIN来找出差异的ID

DECLARE @TB TABLE(ID INT IDENTITY(1,1),STRING VARCHAR(20))
DECLARE @TEST TABLE(ID INT )
INSERT INTO @TB VALUES('1')
INSERT INTO @TB VALUES('2')
INSERT INTO @TB VALUES('3')
INSERT INTO @TB VALUES('4')
INSERT INTO @TB VALUES('5')
INSERT INTO @TB VALUES('6')
INSERT INTO @TB VALUES('7')
DELETE @TB WHERE ID=2
DELETE @TB WHERE ID=4

DECLARE @I INT
SET @I=1
WHILE @I<=7
BEGIN
INSERT INTO @TEST VALUES(@I)
SET @I=@I+1
END

SELECT A.ID  FROM @TEST A LEFT JOIN @TB  B ON A.ID=B.ID WHERE B.ID IS NULL

ID          

----------- 

2

4


(2 row(s) affected)

第5个回答  2013-07-05 写个函数或者存储过程,先查出自增列的最大值,然后用一个自增的循环,去判断列列中是否有该数字,没有就输出该数字。

怎样清空SQL SERVER数据库,清空后让表的ID自增列从1开始??

数据库名:class
要清空的表名:课程表 学生表 选课表
求代码,多谢!!!

SQL Identity自增列清零方法
1.使用DBCC控制台命令:
dbcc checkident(表名,RESEED,0)

2.truncate table 也可将当前标识值清零
但当有外键等约束时,无法truncate表

可以先禁用外键约束来truncate表:
--禁用外键约束
exec sp_msforeachtable 'alter table ? nocheck constraint all'
--清空数据
truncate table 表名
--启用外键约束
exec sp_msforeachtable 'alter table ? check constraint all'

我常用 truncate table 进行数据表内数据的清空,同时将ID列重新开始计数!

truncate table 课程表
truncate table 学生表
truncate table 选课表
参考技术A

清空数据库用语句

drop database 数据库名;

如果是清空表并让id自增列从1开始的话,需要按如下步骤:

1、清空表

truncate table 表名;

2、删除ID列

alter table 表名 drop column ID;

3、新增ID列为自增字段

alter table 表名 add id int identity (1,1) primary key;

参考技术B 将ID删除,重新新增一个本回答被提问者采纳

以上是关于sql中自增列 id,删除其中一个 ,如何查找被删除的行??的主要内容,如果未能解决你的问题,请参考以下文章

如何用sql创建自增列?

sql的自增列如何重置

sql server 如何修改一个字段为自增字段

sql 自增列删除

SQL Server Identity自增列设置为重新从1开始

怎样清空SQL SERVER数据库,清空后让表的ID自增列从1开始??