同时插入多个 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中文网其他相关文章!