表格里的记录是自增的,12345678.。
我现在想在第6行前添加一行记录,应该怎么写?
把想要的数据insert into进表里,id字段给6,再把其他原本大于6的id加1,这样id字段也就不会有重复了
这位同学的目的是什么?
假设有一字段“vNo”,在创建表时设为自增列“vNo bigint identity(1, 1)”后,其所有顺序规则已定,新插入记录的vNo均按原基础序号+1。
在SQL Server 测试:
Create table Temp_CheckTName
(
vNo bigint identity (1, 1) not null,
TestName varchar(50) not null
constraint PK_Temp_CheckTName primary key clustered
(
vNO ASC --主键
)
) --on Check_Data --测试文件组
go
--插入测试数据
insert into Temp_CheckTName (TestName)
values('测试1'),('测试2'),('测试3'),('测试4'),('测试5'),
('测试6'),('测试7'),('测试8'),('测试9')
其“vNo”对应顺序号为1至9
若试执行“update Temp_CheckTName set vNo=7 where vNo=7;”,将提示“无法更新标识列 'vNo'。”
说明自增序列不接受update操作。
若执行删除一条记录“delete Temp_CheckTName where vNo=9”
再插入一条“insert into Temp_CheckTName (TestName) values('测试n')”
此时虽然是9行数据,但“测试n”的“vNo”对应值为“10”,说明不受delete操作影响。
如果非要新增一条“vNo=6”,为了以后查询排序?在数据量不多的前提下,可以变通一下:
1. 将原数据先导出至另一表#Temp_CheckTName_mid。
2. 清除原表Temp_CheckTName对应记录。
3. 将记录插回Temp_CheckTName。
当原表非空且新记录与主键不冲突,手工插入先设 set indentity_insert Temp_CheckTName on
假设之前执行过删除“delete Temp_CheckTName where vNo=6”,再插回一条“vNo”为6的记录
set indentity_insert Temp_CheckTName on
insert into Temp_CheckTName (vNo, TestName) values(6, '测试6')
set indentity_insert Temp_CheckTName off