一个简单的SQL取最大值加1

骑驴快跑 2011-05-29 07:11:30
现在想在ID是主键,表中有很多的数据
表结构如下:
ID 字段1 字段2 字段3
1 字段1 字段2 字段3
2 字段1 字段2 字段3
3 字段1 字段2 字段3
4 字段1 字段2 字段3
现在需要查询出ID为3的数据进行再次插入该表中

insert into 表1(ID,字段1,字段2,字段3)
select max(ID) +1 as ID,字段1,字段2,字段3 from 表1
where ID=3 group By 字段1,字段2,字段3
但是这样永远都是提示错误,不能插入重复值,ID过滤最大值应该是4在加1,就是要ID自动往下循环

那么我在进行倒排序,取top1也不可以

insert into 表1(ID,字段1,字段2,字段3)
select top 1 max(ID) +1 as ID,字段1,字段2,字段3 from 表1
where ID=3 group By 字段1,字段2,字段3 order by ID desc

怎么才能把3的重复记录在插入一次,查询出最大ID进行加1
...全文
1088 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2011-05-29
  • 打赏
  • 举报
回复
--直接设计id为自增列不就可以了吗?
id int identity(1,1)
liang145 2011-05-29
  • 打赏
  • 举报
回复

create table #tb
(ID int, 字段1 nvarchar(10), 字段2 nvarchar(10), 字段3 nvarchar(10))
insert #tb
select 1, '字段1', '字段2', '字段3' union all
select 2, '字段21', '字段22', '字段23' union all
select 3, '字段31', '字段32', '字段33' union all
select 4, '字段41', '字段42', '字段43'

insert #tb
select (select max(id) from #tb)+1 as id,字段1, 字段2, 字段3 from #tb where id =3

不过楼主,这样插入一条数据,有什么意义呢?
快溜 2011-05-29
  • 打赏
  • 举报
回复
declare @num int
select @num=max(id) from tb

insert into 表1(ID,字段1,字段2,字段3)
select @num +1,字段1,字段2,字段3 from 表1 where ID=3
yyoinge 2011-05-29
  • 打赏
  • 举报
回复
insert into 表1(ID,字段1,字段2,字段3)
select (select max(ID) + 1 from 表1),字段1,字段2,字段3 from 表1
where ID=3 group By 字段1,字段2,字段3
yyoinge 2011-05-29
  • 打赏
  • 举报
回复
where id = 3,查询出来的所有数据的id都肯定 = 3, 在max或top都是3, 3再加1肯定都是4,4又已经存在了,所有肯定不能插入

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧