使用Sql Server 批量导入数据时,出现主键重复问题。就是元数据【表1】的id和导入目标【表2】的id主键重复,怎么把【表1】数据导入到【表2】中?【表1】的id在【表2】中自增。
各位大侠帮帮忙,真的很着急,谢谢。
insert into 表2(除ID外的所有字段名)SELECT 除ID外的所有字段名 FROM 表1
这种方法不错。
insert into weibo_Transpond |
([Weibo_id] |
,[user_id] |
,[user_link] |
,[Transpond_url] |
,[Transpond_Author] |
select |
[Weibo_id] |
,[user_id] |
,[user_link] |
,[Transpond_url] |
,[Transpond_Author] |
from weibo_Transpond_new with(nolock) |
where not exists |
( |
select 1 from weibo_Transpond with(nolock) where weibo_Transpond.Transpond_Id=weibo_Transpond_new.Transpond_Id |
) |
先新建第3张表,然后把1表和2表除去主键以外的都导入过去,这样的话就自动的生成所有的主键(第3张表中)这个时候,你可以把第3张表当做第2张表了
这样会有问题吧,如果先导表1 的数据,导表2的数据时还会出现,主键重复吧。
这和我直接从表1导入表2 一样。
@t-h: 第三表的主键是自增的,导入表1,表2的时候,主键是不导入的。这样表3就是需要的表了。
其实,你直接从表1导入到表2就行了。表1的主键不导入。
表1的id还保留吗?不保留的话导入的时候不导入这一列不就行了
首先:要确保表2的表结构,表2中设置id那一列的是自增的,其他字段与表1的其他字段的类型,长度,约束都一样。
第二:将表1的除了ID那一列的其他数据导入。
上面说的方法表2的ID 和 表1 的ID可能不一样。还有一种办法,表2 是一个空的结构,没有设置主键。把表1的数据全部导进去以后,在设置主键。
table2 的ID 不是自动增长的吧。
先用 row_number() 查询出每行的序号 rowid。在查出 table2 最大的 ID
导入时 insert into table2(id) select ID+rowid from table
如果你的ID是自动增长列的话,你可以尝试用这个种方法来进行:
drop database testBase
create database testBase
create table test
(
ID int primary key identity(1,1),
name nvarchar(20)
)
declare @i int
declare @name nvarchar(20)
set @i =1
while(@i<10)
Begin
set @name ='Code-'+CONVERT(nvarchar, @i)
insert into test(name)values(@name)
set @i=@i+1
end
select * from test
select * into test2 from test
select * from test2
declare @i int
set @i =1
while(@i<10)
Begin
if(@i%2<>0)
begin
delete from test2 where ID = @i
end
set @i=@i+1
end
select * from test2 order by name
insert into test2 (name) select name from test
select * from test2 order by name