여러 SQL Server 테이블에 동시 삽입
여러 테이블에 데이터를 동시에 삽입하는 것은 어려울 수 있으며, 특히 테이블에 외래 키 관계가 있는 경우 더욱 그렇습니다. . 일반적인 접근 방식은 첫 번째 테이블에 데이터를 삽입하고 기본 키를 검색한 다음 해당 키를 두 번째 테이블에 삽입하는 INSERT-SELECT-INSERT 방법을 사용하는 것입니다.
그러나 이 방법은 비효율적일 수 있습니다. 대규모 삽입용. 이러한 시나리오의 경우 SQL Server는 대체 솔루션을 제공합니다.
insert into [table1] ([data]) output inserted.id, inserted.data into table2 select [data] from [external_table]
이 쿼리는 단일 트랜잭션으로 두 테이블 모두에 데이터를 삽입합니다. OUTPUT 절은 첫 번째 테이블에서 삽입된 기본 키와 데이터를 검색하여 두 번째 테이블에 삽입합니다.
예:
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];
이 쿼리는 데이터를 삽입합니다. 단일 작업으로 외부 테이블에서 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];
이 쿼리는 upsert 작업을 수행하여 아직 존재하지 않는 행을 table1에 삽입하고 기존 행을 업데이트합니다. OUTPUT 절은 삽입된 기본 키와 해당 데이터를 외부 테이블에서 검색하여 table2에 삽입합니다.
위 내용은 여러 SQL Server 테이블에 동시에 효율적으로 데이터를 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!