SQL主键修改问题

lhjAK47 2015-08-27 09:27:24
目前遇到一个问题,业务逻辑就是,从A表中取出一部分数据,修改某一列的值,再新增回A表.
我想新增一个临时表,将查出的数据插入临时表,然后批量update字段,再重新插回A表,可是主键是重复的,怎样才能批量替换主键呢?
...全文
330 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-08-27
  • 打赏
  • 举报
回复
既然是复制后新增,要用新的主键啊。
你原先新增记录生成主键的策略是什么?照做。
LongRui888 2015-08-27
  • 打赏
  • 举报
回复
比如,如果是整数的主键,可以这样: insert into A表(......) select (select max(主键id) from A)+row_number() over(order by getdate()) as id, 其他字段 from 临时表
LongRui888 2015-08-27
  • 打赏
  • 举报
回复
是不能直接修改A表的那个字段吗? 修改A表的数据后,就要把修改后的值 ,也插入到A表 是吗? 你的主键是 整数自增列,还是 你自己生成的id呢? 不同的情况,有不同的处理方法
Pact_Alice 2015-08-27
  • 打赏
  • 举报
回复
你意思是原来没有更新的数据也是需要的对吧。那么你的主键是什么呢,是数字还是是流水号,可以产生新的流水号
Pact_Alice 2015-08-27
  • 打赏
  • 举报
回复
你不是先将数据拿出来放入临时表用于更新字段了嘛,那么可不可以将实体表的那些拉出来的数据给删除了,最后再将修改的数据插入实体表中
LongRui888 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也不删除.

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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