如何在单脚本中利用TableA自增主键批量插入多表关联记录
单脚本实现1:1关联表的批量插入操作
核心思路
利用SQL Server的OUTPUT子句捕获TableA插入后自动生成的主键IdA,将其暂存到表变量中,再基于这些主键批量插入关联的TableB表,确保两张表的记录严格保持1:1对应关系。
完整脚本示例
-- 开启事务保证操作原子性(可选但推荐) BEGIN TRANSACTION BEGIN TRY -- 声明表变量,存储TableA插入后的主键及关联字段 DECLARE @InsertedTableAIds TABLE (IdA INT, Name NVARCHAR(MAX)) -- 向TableA插入多行数据,同时将生成的主键输出到表变量 INSERT INTO TableA (name) OUTPUT inserted.IdA, inserted.name INTO @InsertedTableAIds VALUES ('用户1'), ('用户2'), ('用户3') -- 基于表变量中的IdA,向TableB插入对应记录 INSERT INTO TableB (IdA, CreatedDate, ExpriyDate) SELECT IdA, GETDATE(), -- 自动填充当前时间为创建日期 DATEADD(MONTH, 1, GETDATE()) -- 自动填充1个月后的时间为过期日期 FROM @InsertedTableAIds COMMIT TRANSACTION END TRY BEGIN CATCH -- 若出现错误则回滚事务,避免数据不一致 ROLLBACK TRANSACTION THROW END CATCH
关键说明
OUTPUT子句:是实现关联插入的核心,能直接获取插入操作生成的自动主键,避免后续查询主键可能出现的并发问题。- 事务处理:添加事务确保TableA和TableB的插入操作要么全部成功,要么全部回滚,保障数据一致性。
- TableB的
IdB:如果该字段是自动递增主键(IDENTITY),脚本中无需显式赋值,数据库会自动生成。
内容的提问来源于stack exchange,提问作者K.Z
相关产品推荐
相关产品推荐

