将查询结果插入到另一张表时ID的处理

时间:2021-12-16 00:43:12
A表有字段:col1,col2,col3....
B表有字段:id,col1,col2,col3....(ID列为INT型,且不是自增列,且不能为空,且不能重复)


现在要将对A表的查询结果插入到B表中。


INSERT INTO B SELECT id,col1,col2,col3.... FROM A Where ....

但这个语句怎么处里B表那个ID列


3 个解决方案

#1


select identity(int,1,1),col1,... into # from A where 

INSERT INTO B SELECT * FROM #

#2


如果A表中有递增或者递减列,
数据量不是很大的话,
可以使用,
insert into B select id=(select count(1) from A where col <= t.col ) ,* from A t

如果是2005的话,
使用ROW_NUMBER(),
这个就不写了,
留给楼下的 :)

#3


引用楼主 SL0413 的帖子:
A表有字段:col1,col2,col3.... 
B表有字段:id,col1,col2,col3....(ID列为INT型,且不是自增列,且不能为空,且不能重复) 


只是说id是int型,且不能为空和重复,没说生成的规则,无法给出你解决方法。
如果表B中原无记录可以按和尚的作,如果表中已有记录,那样做就会有重复的ID

#1


select identity(int,1,1),col1,... into # from A where 

INSERT INTO B SELECT * FROM #

#2


如果A表中有递增或者递减列,
数据量不是很大的话,
可以使用,
insert into B select id=(select count(1) from A where col <= t.col ) ,* from A t

如果是2005的话,
使用ROW_NUMBER(),
这个就不写了,
留给楼下的 :)

#3


引用楼主 SL0413 的帖子:
A表有字段:col1,col2,col3.... 
B表有字段:id,col1,col2,col3....(ID列为INT型,且不是自增列,且不能为空,且不能重复) 


只是说id是int型,且不能为空和重复,没说生成的规则,无法给出你解决方法。
如果表B中原无记录可以按和尚的作,如果表中已有记录,那样做就会有重复的ID