2

谁能告诉我如何使用主键、外键在两个表上重复多次插入这就是我所做的。这是需要做的事情的一个非常片段。StatusTable 有大约 200 行。我正在尝试将此状态表的详细信息拆分为 2-Table1、Table2。

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

但这不是它的工作方式。它将所有 200 行插入 Table1,然后获取标识,然后将单行插入 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')

请建议

4

2 回答 2

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
于 2013-05-01T22:03:26.867 回答
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)
于 2013-05-01T21:11:39.100 回答