2016-09-10 7 views
0

次のような構造のテーブルA、B、Cが3つあります。複数の行データを2つのテーブルに同時に挿入するにはどうすればいいですか

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 

M y質問: 'Table-A'の "DeptCode = 101"で、 'Table-B'の新しく挿入された各データに対応するすべてのレコードの 'Table- C ' - 単一クエリで

この問題は、条件が満たされている' table-A 'から' Table-B 'に複数の行データを挿入することで2つに分けることができます。次のスクリプトを使用して実行できます。

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

表Bの1行に新たに追加された行については、次のクエリを使用して 'Table-C'にデータを追加できます。あなたが複数挿入された行を管理するためにoutput句を使用することができます「テーブル-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

からすべてのレコードのために - 2つのクエリをマージすることができる方法がわかりません。このようなもの。

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 
関連する問題