SQL主键修改问题

lhjAK47 2015-08-27 09:27:24
目前遇到一个问题,业务逻辑就是,从A表中取出一部分数据,修改某一列的值,再新增回A表.
我想新增一个临时表,将查出的数据插入临时表,然后批量update字段,再重新插回A表,可是主键是重复的,怎样才能批量替换主键呢?
...全文
220 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Tiger_Zhao 2015-08-27
既然是复制后新增,要用新的主键啊。
你原先新增记录生成主键的策略是什么?照做。
回复
比如,如果是整数的主键,可以这样: insert into A表(......) select (select max(主键id) from A)+row_number() over(order by getdate()) as id, 其他字段 from 临时表
回复
是不能直接修改A表的那个字段吗? 修改A表的数据后,就要把修改后的值 ,也插入到A表 是吗? 你的主键是 整数自增列,还是 你自己生成的id呢? 不同的情况,有不同的处理方法
回复
Pact_Alice 2015-08-27
你意思是原来没有更新的数据也是需要的对吧。那么你的主键是什么呢,是数字还是是流水号,可以产生新的流水号
回复
Pact_Alice 2015-08-27
你不是先将数据拿出来放入临时表用于更新字段了嘛,那么可不可以将实体表的那些拉出来的数据给删除了,最后再将修改的数据插入实体表中
回复
引用 8 楼 lhjAK47 的回复:
[quote=引用 4 楼 yupeigu 的回复:] 比如,如果是整数的主键,可以这样: insert into A表(......) select (select max(主键id) from A)+row_number() over(order by getdate()) as id, 其他字段 from 临时表
是uuid ,不是整数[/quote] 那在sql server 里 就用这个 newid() 函数就可以了,可以生产全局唯一的id,不会重复,类似于下面这样:
select newid()
/*
47AD2518-EEBF-4D70-8A81-2E3C6935A022
*/
回复
gw6328 2015-08-27
你都是更新一列。为什么要取出来?再插入? 如果是改变一次插入一行,那么你不要插入自增id就可以了,会自动增加的。
回复
lhjAK47 2015-08-27
引用 4 楼 yupeigu 的回复:
比如,如果是整数的主键,可以这样: insert into A表(......) select (select max(主键id) from A)+row_number() over(order by getdate()) as id, 其他字段 from 临时表
是uuid ,不是整数
回复
lhjAK47 2015-08-27
引用 4 楼 yupeigu 的回复:
比如,如果是整数的主键,可以这样: insert into A表(......) select (select max(主键id) from A)+row_number() over(order by getdate()) as id, 其他字段 from 临时表
原来类似于hibernate 的样子,取出来,把bean属性改变,主键赋值null,然后再重新插入回去,自动生成主键,但是这样做效率实在是太慢了,要改.
回复
lhjAK47 2015-08-27
引用 1 楼 Landa_Alice 的回复:
你不是先将数据拿出来放入临时表用于更新字段了嘛,那么可不可以将实体表的那些拉出来的数据给删除了,最后再将修改的数据插入实体表中
嗯也是需要的. 比如有 有一条b记录,有10列,想要修改一列,再重新插入回去,除了一列和主键不同,其他都相同,b也不删除.
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-08-27 09:27
社区公告
暂无公告