複数の SQL Server テーブルへの同時挿入
複数のテーブルにデータを同時に挿入することは、特にテーブルに外部キー関係がある場合に困難になる可能性があります。 。一般的なアプローチは、INSERT-SELECT-INSERT メソッドを使用することです。このメソッドでは、最初のテーブルにデータを挿入し、主キーを取得して、そのキーを 2 番目のテーブルに挿入します。
ただし、この方法は非効率になる可能性があります。大規模な挿入用。このようなシナリオに対して、SQL Server は代替ソリューションを提供します。
insert into [table1] ([data]) output inserted.id, inserted.data into table2 select [data] from [external_table]
このクエリは、単一のトランザクションで両方のテーブルにデータを挿入します。 OUTPUT 句は、挿入された主キーとデータを最初のテーブルから取得し、2 番目のテーブルに挿入します。
例:
CREATE TABLE [table1] ( [id] [int] IDENTITY(1,1) NOT NULL, [data1] [varchar](255) NOT NULL, CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ([id] ASC) ); CREATE TABLE [table2] ( [id] [int] IDENTITY(1,1) NOT NULL, [table1_id] [int] NOT NULL, [data2] [varchar](255) NOT NULL, CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED ([id] ASC) ); INSERT INTO [table1] ([data1]) OUTPUT INSERTED.ID, INSERTED.DATA1 INTO [table2] ([table1_id], [data2]) SELECT [data1] FROM [external_table];
このクエリはデータを挿入します。 1 回の操作で外部テーブルから table1 と table2 の両方にコピーします。 table1 のデータは、table2 の外部キー関係を作成するために使用されます。
さまざまなデータ列の処理:
一部のシナリオでは、ソース内のデータ列と宛先テーブルは異なる場合があります。この場合、MERGE ステートメントを使用できます。
MERGE INTO [table1] AS t USING [external_table] AS s ON 1=0 -- modify this predicate as necessary WHEN NOT MATCHED THEN INSERT (data) VALUES (s.[col1]) OUTPUT INSERTED.ID, s.[col2] INTO [table2];
このクエリは、更新/挿入操作を実行し、まだ存在しない行を table1 に挿入し、既存の行を更新します。 OUTPUT 句は、挿入された主キーと対応するデータを外部テーブルから取得し、table2 に挿入します。
以上が複数の SQL Server テーブルに同時にデータを効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。