简体   繁体   English

如何将多个行数据同时插入两个表

[英]How can I insert multiple row data into two tables simultaneously

Let's say, I've 3 tables A, B and C with following structure. 假设,我有3个表A,B和C,其结构如下。

Table-A 表A

ID - (int) - PrimaryKey - Identity(auto-generated)
DeptCode - (int)

Table-B 表B

ID - (int) - PrimaryKey - Identity(auto-generated)
Data1 - varchar
AID - Foreign Key from Table-A

Table-C 表C

ID - (int) - PrimaryKey - Identity(auto-generated)
Data2 - varchar
Data3 - varchar
BID - Foreign Key from Table-B

My Question : How to insert data in 'Table-B' for all records where "DeptCode=101" in 'Table-A' and corresponding to each newly inserted data in 'Table-B' insert 1 row data in 'Table-C' - In Single query 我的问题 :如何在“表A”中“ DeptCode = 101”并与“表B”中每个新插入的数据相对应的所有记录的“表B”中插入数据,在“表C”中插入1行数据'- 在单个查询中

The problem can be broken down into two parts, inserting multiple row data in 'Table-B' from 'table-A' where criteria is satisfied. 该问题可以分为两部分,即在满足条件的情况下从“表A”中的“表B”中插入多行数据。 It can be done using following script. 可以使用以下脚本来完成。

INSERT INTO [TableB] ([Data1]) SELECT  NEWID() FROM TableA WHERE [DeptCode] = 101;

For 1 newly added row in Table-B, data can be added to 'Table-C' using following query; 对于表B中的1个新添加的行,可以使用以下查询将数据添加到“表C”中; not sure how the two queries can be merged - for all the records from 'Table-A' 不知道如何合并两个查询-对于“表A”中的所有记录

BEGIN TRANSACTION
DECLARE @DataID int;
INSERT INTO Table2 ([Data1]) VALUES (NewID());
SELECT @DataID = scope_identity();
INSERT INTO Table3 VALUES ('some data', 'some more data', @DataID);
COMMIT

You can use output clause to manage multiple inserted rows. 您可以使用output子句来管理多个插入的行。 Something like this. 这样的事情。

DECLARE @ids table (DataID int);
BEGIN TRANSACTION
INSERT INTO [TableB] ([Data1]) 
output inserted.id into @ids --collect identity id's
SELECT  NEWID() FROM TableA WHERE [DeptCode] = 101;

INSERT INTO Table3 
select 'some data', 'some more data', DataID
from @ids;
COMMIT

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM