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

时间:2016-09-10 21:17:43

标签: sql sql-server database

让我们说,我有3张表A,B和C,结构如下。

表格-A

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

表格-B

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

表格-C

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

我的问题:如何在'表-B'中插入数据对于所有记录,其中" DeptCode = 101"在'表-A'并且对应于<表B'中的每个新插入的数据。在'表-C'中插入1行数据 - 单个查询

问题可以分为两部分,在表B和表39中插入多行数据。来自&table; A'满足标准的地方。可以使用以下脚本完成。

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

对于表B中的1个新添加的行,可以将数据添加到表-C'表-C'使用以下查询;不确定如何合并两个查询 - 对于来自'表-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

1 个答案:

答案 0 :(得分:1)

您可以使用output子句来管理多个插入的行。这样的事情。

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