大家都知道,只要有新加记录,SQL中自动增长字段的值总是自动累加的(假设是加1),即使这条记录后来被删除了,但这个值照样已经“被使用过了”。
举例说,当前表中这个自增长字段最大值是10,后来插入了两条记录,这个字段值就先后变成了11,12.再后将11、12这两条记录删除了,但以后再插入记
录时,这个字段值会变成13,而不会是11.因此,我在想,在数据库中,一定有个地方存储这个自增长字段已经增长到哪个量了,如果找到这个地方,并将记录
的这个量改回(比如改回10),那么中间就不会有空白了。
那么,这个地方到底在哪呢?能不能改呢?
即:
SET IDENTITY_INSERT 表 ON
--再插入之前删除的值
SET IDENTITY_INSERT 表 OFF
eg:
create
table
tb(id
int
identity
(
1
,
1
),name
varchar
(
10
))
insert
into
tb(name)
select
'
abc
'
insert
into
tb(name)
select
'
sfd
'
insert
into
tb(name)
select
'
efawe
'
insert
into
tb(name)
select
'
asdf2
'
insert
into
tb(name)
select
'
efw
'
insert
into
tb(name)
select
'
afsd
'
insert
into
tb(name)
select
'
asdf2
'
insert
into
tb(name)
select
'
2fsf
'
insert
into
tb(name)
select
'
cawe
'
insert
into
tb(name)
select
'
sdf2qe
'
go
select
*
from
tb
delete
from
tb
where
id
=
9
or
id
=
10
select
*
from
tb
go
SET
IDENTITY_INSERT
tb
ON
insert
into
tb(id,name)
select
9
,
'
u2478f
'
insert
into
tb(id,name)
select
10
,
'
nv9oawe
'
insert
into
tb(id,name)
select
11
,
'
adfunsdf
'
insert
into
tb(id,name)
select
12
,
'
vno9af
'
SET
IDENTITY_INSERT
tb
OFF
--
下面用新的标识值,当插入值大于原标识值时,自动更改标识,但不能向下改,如果你要向下改,只能不用标识,如上面所示.
insert
into
tb(name)
select
'
3awef
'
insert
into
tb(name)
select
'
faerq3
'
select
*
from
tb
go
drop
table
tb
同时可以用以下命令查看自增长字段的值:
dbcc checkident (表名TableName)
分享到:
相关推荐
### SQL Server中实现字段值自动增长且连续的关键知识点 #### 引言 在数据库管理中,确保特定字段的值能够自动增长且保持连续性对于数据的有序性和完整性至关重要。SQL Server提供了多种方法来实现这一需求,包括...
本工具是自己开发的,用于SQL Server 数据库的备份与还原用,有了本工具,设定好每一个数据库的备份时间,可以按年、月、日、时、分设置好后,到时间自动备份,工具还有备份数据为多少天前的可以自动删除,同时也有...
二是删除表中的记录后,自动增长列的值会出现不连续的现象,因为SQL Server不支持自动更新自动增长列的值,也不允许自动增长列存在NULL值或默认值。 为了解决这些缺陷,引入了第二种方法,即通过创建一个自定义函数...
在Oracle数据库中,表的自动增长列通常是指使用序列(SEQUENCE)或者使用Oracle提供的自动增长数据类型(例如:IDENTITY或者GENERATED AS IDENTITY),以实现表中某列值能够随着记录的增加而自动递增。本文将介绍...
将Sql Server 2000中的数据库备份文件还原到Sql Server 2005中是一个常见的问题。在这个过程中,我们需要了解Sql Server 2000和Sql Server 2005之间的差异,以便正确地还原数据库备份文件。下面是相关的知识点: 1....
在本例中,我们关注的是如何在SQL中获取刚插入记录的自动增长列(通常是主键)的值。我们将探讨SQL Server 2000和SQL Server 2005及以上版本的不同处理方式,以及如何在C#环境中使用这些方法。 首先,我们创建了一...
sql server 中如何增加递增的序号列 sql server 是一种功能强大且广泛应用的关系数据库管理系统,随着业务的发展和数据的增长,对于数据的管理和处理变得越来越重要。在 sql server 中,增加递增的序号列是非常...
在SQL Server数据库设计中,有时候我们需要创建一个列,它的值能自动递增,这通常用于主键字段,确保每一行数据都有唯一的标识。这个特性在SQL Server中被称为“标识列”(Identity Column)。下面我们将详细讲解...
通过创建一个序列(SEQUENCE),可以方便地为表中的某列自动生成唯一的值,这对于主键或者需要唯一标识符的场景非常有用。 #### 1. SEQUENCE概述 `SEQUENCE`是Oracle数据库提供的一个对象类型,它可以用来生成一...
主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。
在描述中提到的“Sql数据自动备份和还原工具”具有友好的用户界面和强大的功能。全量备份会复制整个数据库,而增量备份仅记录自上次备份以来的更改,差异备份则记录自上次全量备份以来的更改。这些备份类型的选择...
在SqlServer2017中,可以采用手动备份和自动备份两种方式进行数据库的备份,同时在必要时进行还原操作。 首先,我们来了解手动备份。手动备份是通过SQL Server Management Studio(SSMS)这个工具来完成的。操作...
SQL_SERVER_2000手动、自动备份和还原 SQL Server 2000 数据库备份和还原是数据库管理员最重要的任务之一。备份可以防止数据丢失,确保数据安全,而还原可以快速恢复数据库,减少停机时间。本文将详细介绍 SQL ...
在SQL Server 2012中,用户可能会遇到一个特定问题,即在重启数据库服务后,自增ID字段(如主键)会自动跳过1000个值。这可能会对数据一致性造成影响,尤其是在有严格顺序需求或依赖于这些ID的业务逻辑中。本文将...
在SQL Server 2012中,自增ID(Identity列)是数据库设计中的常见元素,用于自动为新插入的行生成唯一的标识符。然而,有时可能会遇到自增ID值跳过特定数值,例如从一个ID跳到1000或2000的情况。这种问题通常是由于...
在SQL Server数据库中,主键自增长列是一个重要的特性,它允许你在插入新记录时自动为该列生成唯一的标识符,通常用于唯一地标识表中的每一行。这在处理大量数据时尤其有用,因为它简化了数据插入过程,你无需手动为...
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
- 修复完成后,软件会自动将数据导入到SQL Server中,方便快捷。 #### 五、总结 SQL Server备份、还原和修复是保障数据库稳定运行的关键步骤。通过合理规划备份策略,并熟练掌握还原与修复方法,可以有效应对各种...
SQL-Server-2008-数据库还原到SQL-Server-2012.doc
SQLServer2008R2数据库备份与还原操作文档.pdf