使用主键,外键重复插入

时间:2013-05-01 20:32:45

标签: sql-server tsql

任何人都可以告诉我如何使用主键,外键在两个表上重复多次插入 这就是我所做的。 这是需要做的事情的一小部分。 StatusTable有大约200行。我试图将此Status表的详细信息拆分为2- Table1,Table2。

将每条记录插入Table1后,我得到了Identity列,这需要将一些额外的东西插入到Table2中。因此,如果StatusTable中有200行,则Table1,Table2中有200行。

但那不是它的工作方式。它将所有200行插入Table1,然后获取Identity,然后在Table2中插入一行。我知道为什么这样做。但不知道如何解决它..

     INSERT INTO [dbo].[Table1]
               ([UserID],  
               ,[FirstName].......)
     SELECT 'User1' AS [UserID]
               ,'FirstName'
     FROM [dbo].[StatusTable]

     SELECT @id =  SCOPE_IDENTITY()

     INSERT INTO [dbo].[Table2]
                ([AccountID],[Status]
           values (@id, 'S')

请建议

2 个答案:

答案 0 :(得分:4)

使用OUTPUT子句

 DECLARE @IDS TABLE (id INT) 

 INSERT INTO [dbo].[Table1]
               ([UserID]  
               ,[FirstName])
     OUTPUT inserted.id INTO @IDS          
     SELECT 'User1' AS [UserID]
               ,'FirstName'
     FROM [dbo].[StatusTable]

     INSERT INTO [dbo].[Table2]
                ([AccountID],[Status])
         SELECT Id, 'S' FROM @IDS

答案 1 :(得分:0)

在时间逻辑上尝试基于集合的方法而不是此单行。加载第一个表,然后您可以将插入中的第一个表和数据表引用到第二个表中,如果您有某些内容使每一行都是唯一的。

您可以使用select语句而不是值列表:

insert into table
select rows from othertable (or multiple tables...it's a select statement as complicated as you wish)

伪编码:

Insert into table2 (datacolumns)
select table1.id, datacolumn 
from statustable  s 
inner join table1 t
on (whatever makes these rows unique)