两个表中的大插入。第一个表将使用其生成的Id提供第二个表

时间:2010-06-28 17:07:46

标签: sql tsql database-design optimization

关于如何对以下查询进行t-sql编程的一个问题:

表1 我在一个有两列的表中插入400.000个移动电话号码。要插入的号码和身份ID。

表2 第二个表称为SendList。它是一个包含3列,标识ID,列表ID和phonenumberid的列表。

表3 被称为ListInfo并包含PK列表id。和关于清单的信息。

我的问题是我应该如何使用T-sql:

将带有phonenumbers的大型列表插入表1,插入生成的id来自phonenum的插入。在table1,表2中以优化的方式。它不能花很长时间,这是我的问题。

非常感谢有人可以指导我这个。

谢谢

塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的SQL Server?如果您使用的是2008,则可以使用OUTPUT子句插入多个记录,并将所有身份记录输出到表变量。然后,您可以使用它来插入子表。

DECLARE @MyTableVar table(MyID int);
INSERT MyTabLe (field1, field2)    
OUTPUT INSERTED.MyID
        INTO @MyTableVar
select Field1, Field2 from MyOtherTable where field3 = 'test'

- 显示表变量的结果集。

Insert MyChildTable (myID,field1, field2)
Select MyID, test, getdate() from @MyTableVar

我没有直接使用批量插入尝试此操作,但是您可以始终对一个临时表进行bulkinsert,然后使用上述过程。插入记录组比一次快得多。