我们在使用数据库时可能会删除一些记录,因此,数据表中的标识就有可能不是由1开始或其间会断断续续.可以怎么来使它重新置1并排列呢?
大家经常使用SQL Server的ID自增长,也就是所谓的标识列来充当某张表的主键。
这里有两个概念要澄清:
1.标识列:
可用IDENTITY属性建立,使应用程序开发人员得以对表中所插入的第一行指定标识数字(Identity Seed属性),并确定要添加到种子上的增量(Identity Increment属性)以决定后面的标识数字。在向具有标识符列的表中插入值时,通过递增种子值的方法自动生成下一个标识值。
2.主键:
可用primary key表示。唯一标识表中的所有行的一个列或一组列。主键不允许空值。不能存在具有相同的主键值的两个行,因此主键值总是唯一标识单个行。
那么,当我们表中的数据很多,又有些删除的操作时,标识列就不连贯了,我们如何让表中已有记录的标识列从1开始重新排列,并将标识列的下一个值设为记录数加1呢?下面我们以一张studentid identity(1,1)primary key,name,age)表为例,给大家提供几种方法,以供参考:
(1)手工方法:
先要取消标识列,完成下面的语句后再将标识列加上,这样标识列又可以按顺序递增了。这里你可以直接使用企业管理器操作。
declare@iint select@i=0 updatestudent set@i=@i 1,id=@i
(2)全自动方法:
利用临时表,步骤就是将表中除id以外的数据拷贝到临时表中,再清空原表,插入临时表的数据,最后删除临时表。
--将数据倒入临时表
selectname,ageinto#fromstudentorderbyid
--清空源表,它同时会重置标识列
truncatetablestudent//清空表,标识种子置初值,这里要注意的是下面的语句会清空表中的所有原有数据。
--将数据导回源表
insertintostudentselect*from#
--删除临时表
droptable#
这里顺便提一下,有同志在插入测试数据的时候一条一条记录的插入,这样太浪费时间,我们可以写一条循环语句加快测试速度:
declare@iint set@i=1 while@i=100 begin insertintostudentvalues('tbag' cast(@i as varchar)
,25 @i)
set@i=@i 1 end
分享到:
相关推荐
SQLServer-让标识列重新开始计算!
标识列与普通列相互转的示例 --创建测试表 CREATE TABLE t1(ID int IDENTITY,A int) GO --插入记录 INSERT t1 VALUES(1) GO --1. 将IDENTITY(标识)列变为普通列 ALTER TABLE t1 ADD ID_temp int GO UPDATE t1 SET ...
代码如下: –允许对系统表进行更新 exec sp_configure ‘allow updates’,1 reconfigure with override GO –取消标识列标记 update syscolumns set colstat = 0 where id = object_id(‘tablename’) and colstat ...
sqlserver 实现 行转列 split 分割的函数,具体使用方法写有在文件里。
sql server 重新组织和重新生成索引
sqlserver 动态行专列 避免了数据列过多的时候大量的使用case when then...... 原数据 : UserName Subject Score Nick 语文 80 Nick 数学 90 Nick 英语 70 Nick 生物 85 Kent 语文 80 Kent 数学 90 Kent ...
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
Sql Server里面的行转列,列转行
sqlserver 创建自动增长列的方法,返回最后插入记录的自动编号
sql server 中如何增加递增的序号列
本文介绍了在SQL Server计算列和平均值的方法。
SQL Server 将某一列的值拼接成字符串示例
sql行变列说明
死锁的诊断和定位 查询阻塞的语句 查询执行较慢的语句 查询正在执行的语句1 查询正在执行的语句2 查询所有表的主键 查询所有索引 查询表结构 ...修改SQLServer最大内存 用DAC连接到SQL Server 其它SQL DBCC
SQL SERVER中自动标识列的改进.pdf
SqlServer如何进行行转列和列转行方法
有的情况我们需要手动插入标识列的值,例如删除了一些记录后,标识列并不连续,而我们又想把它补齐。我们利用一个开关可以让愿望变成现实: 代码如下:SET IDENTITY_Insert [TableName] ON 在查
SQL行转列参考代码(sqlserver)
此文档中详细的记载了,SQL Server 索引中include的魅力(具有包含性列的索引),希望可以帮到下载的朋友们!
sql server拼接字符串查询语句。 普通拼接字符串和拼接某一列的所有值。