SQL Server ID 自增不连续、删除任意列数据后ID不连续的解决方案。

本文探讨了在SQL Server中自增ID不连续的情况,提供了删除数据后ID不连续的解决方案,包括删除重建表、清空并重新插入数据、使用TRUNCATE TABLE以及与触发器和存储过程的结合使用,同时强调了操作中的注意事项,如外键约束、不可回滚的DDL语句以及异常处理的重要性。
摘要由CSDN通过智能技术生成

在 SQL Server 中,删除一条数据不会导致自增列重置。自增列的值是根据表中已有的最大值自动递增生成的,而不是根据表中已删除的行数来计算的。因此,即使删除了一些行,自增列的下一个值仍然会基于表中已有的最大值来计算。如果想重置就需要删除表数据,重置自增ID。有多种方法,我统一使用T-SQL编写。


目录

一、首先建实验环境

目录

一、首先建实验环境

1、首先,使用T-SQL创建一个实验表

2、使用语句删除其中有几条条数据并查看新表

3、插入新数据,查看表数据

二、更新ID列的方法

1、删除表重新创建新表,将原表数据复制进新表

2、清空表数据,然后重新插入原数据,有两种清除重置更新方法。

        1、第一种方法使用DELET清除表数据

        2、第二种方法使用TRUNCATE TABLE清空表

三、和触发器以及存储过程结合使用

1、和触发器结合使用

2、和存储过程结合使用和触发器相似,只需要把代码放入存储过程代码块就可以了,下面是一个示例。

四、注意事项


一、首先建实验环境

1、首先,使用T-SQL创建一个实验表

--创建一个用来收集数据库表简单的结构信息的表
CREATE TABLE [dbo].[Info_Xinxi](
	[ID] [INT] IDENTITY(1,1) NOT NULL,--自增ID列
	[TabbleName] [VARCHAR](50) NOT NULL,
	[ColuntName] [VARCHAR](50) NOT NULL,
	[说明] [VARCHAR](255) NULL
)
--向表中插入数据,这边随便插入几条用来测试
INSERT INTO dbo.Info_Xinxi (TabbleName,ColuntName,[说明])
VALUES  (1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1),
		(1,1,1)
--查看表数据
SELECT * FROM dbo.Info_Xinxi

 可以看到ID列自动生成序号

2、使用语句删除其中有几条条数据并查看新表

DELETE dbo.Info_Xinxi--删除表信息
WHERE ID BETWEEN 5 AND 7--条件是ID在5到7包括两边
SELECT * FROM dbo.Info_Xinxi--查询表所有数据

 可以看到中间序号断层了,没有连上

3、插入新数据,查看表数据

INSERT INTO dbo.Info_Xinxi(TabbleName,ColuntName,说明)--插入数据ID列不加,因为ID列是自增列无法插入。
VALUES(2,2,2),--插入数据为2和最开始插入的区分起来
      (2,2,2)
SELECT * FROM dbo.Info_Xinxi--查看数据并排序,让结果一目了然
ORDER BY ID 

 可以看到数据从最大的ID记录往后开始自动填充。

二、更新ID列的方法

1、删除表重新创建新表,将原表数据复制进新表

--首先查询原表所有数据,并且将其数据插入放置在一个局部临时表里。
SELECT * INTO #Lingshi FROM dbo.Info_Xinxi

--删除原先的表
DROP TABLE dbo.Info_Xinxi

--创建一个新表
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值