让我们说,我有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
答案 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