将数据从50 GB表插入另一个100 GB表

时间:2014-07-27 04:20:34

标签: sql sql-server sql-server-2008 windows-7

我需要将50 GB表table1中的数据插入同一数据库中的另一个100GB表table2table1的列全部为varchar(50)table2的列为intfloat

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中的插入数据相同?

2 个答案:

答案 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