我需要将50 GB表table1
中的数据插入同一数据库中的另一个100GB表table2
。 table1
的列全部为varchar(50)
,table2
的列为int
和float
。
table1: non clustered primary key
id1 id2 value -- all types are varchar(50)
242 8965 8974202.87412
table2: id1 id2 are clustered primary key
id1 id2 value -- id1 and id2 types are int, value is float
257 872 9826531.889
我的代码:
INSERT INTO [my_db].[dbo].[table2]
SELECT Cast(a.id1 AS INT),
Cast(a.id2 AS INT),
Cast(a.value AS FLOAT)
FROM [my_db].[dbo].[table1] AS a
table2
中插入的数据是否与table1
中的插入数据相同?
答案 0 :(得分:0)
你必须检查table1有重复键id1,id2插入table2时如果它重复插入失败
答案 1 :(得分:0)
我建议使用SSIS转换数据以获得更好的性能。
如果您不想使用SSIS,我建议在开始转换之前删除所有索引和外键以及约束并触发,然后创建它们。
同样在开始转换之前检查table1中的重复记录,然后使用以下查询将table1中的数据保存到table2中:
INSERT INTO [my_db].[dbo].[table2]
SELECT cast(a.id1 AS INT), cast(a.id2 AS INT), cast(a.value as float)
FROM [my_db].[dbo].[table1] as a
LEFT JOIN [my_db].[dbo].[table2] AS b ON b.id1 = a.id1
AND b.id2 = a.id2
WHERE b.id1 IS NULL