同時插入多個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];
此查詢將插入資料在一次操作中從外部表到表 1 和表 2。 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中文網其他相關文章!