You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单次数据库连接中复用首次INSERT的自动ID进行二次插入

单次连接完成主表自增ID获取及子表插入操作

你可以在单次连接的同一个SQL批处理中完成这两个插入操作,无需多次连接服务器。这里推荐使用更安全的SCOPE_IDENTITY()来获取自增ID,而非@@IDENTITY,前者仅返回当前作用域内生成的自增ID,避免触发器等其他操作干扰结果。

方法一:直接在同批处理中使用SCOPE_IDENTITY()

-- 插入主表InventoryTransfer
INSERT INTO InventoryTransfer (CFromSite, CToSite, CStatus, CUsername)
VALUES ('Store', 'Warehouse', 'Active', 'Chris');

-- 插入子表InventoryTransferDetails,使用主表刚生成的自增ID
INSERT INTO InventoryTransferDetails (CTransferID, CQuantity, CBarcode) 
VALUES (SCOPE_IDENTITY(), 3, '734987598345');

方法二:用变量存储自增ID(适合需多次复用ID的场景)

DECLARE @TransferID INT;

-- 插入主表并将自增ID存入变量
INSERT INTO InventoryTransfer (CFromSite, CToSite, CStatus, CUsername)
VALUES ('Store', 'Warehouse', 'Active', 'Chris');
SET @TransferID = SCOPE_IDENTITY();

-- 使用变量插入子表
INSERT INTO InventoryTransferDetails (CTransferID, CQuantity, CBarcode) 
VALUES (@TransferID, 3, '734987598345');

注意事项

  • @@IDENTITY存在局限性:如果InventoryTransfer表有插入触发器,且触发器中插入了其他带自增列的表,@@IDENTITY会返回触发器中生成的ID,而非你需要的InventoryTransfer.CID。
  • SCOPE_IDENTITY()仅返回当前批处理、存储过程或触发器作用域内生成的自增ID,结果更准确可靠。

内容的提问来源于stack exchange,提问作者chris_techno25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:36:07