我想将数据插入到表中,并使用第一次插入时自动生成的ID进行另一次表插入.

目前我所拥有的是:

Insert into InventoryTransfer (CFromSite, CToSite, CStatus, CUsername)
values ('Store', 'Warehouse', 'Active', 'Chris');

InventoryTransfer有一个名为CID的列,它正在自动递增.我现在所做的是我必须执行

SELECT @@IDENTITY;

并获取值以执行以下语句:

Insert into InventoryTransferDetails (CTransferID, CQuantity, CBarcode) 
values (6, 3, '734987598345');

其中6是我从SELECT @@IDENTITY;获得的自动生成的ID.我在应用程序级别执行这3个步骤,我的意思是我的应用程序必须多次连接到服务器.我如何只与服务器联系一次就能做到这一点?

我的逻辑是:

Insert into InventoryTransfer (CFromSite, CToSite, CStatus, CUsername)
values ('Store', 'Warehouse', 'Active', 'Chris');

Select @@IDENTITY;

Insert into InventoryTransferDetails (CTransferID, CQuantity, CBarcode) 
values (@@IDENTITY, 3, '734987598345');

类似以上的事情将在与服务器的1个连接中完成.我不介意使用;,只要它只有1个服务器连接即可.非常感谢.

推荐答案

您需要将标识值存储到两个INSERT之间的一个变量中:然后在第二个INSERT调用中使用该变量:

INSERT INTO dbo.InventoryTransfer (CFromSite, CToSite, CStatus, CUsername)
VALUES ('Store', 'Warehouse', 'Active', 'Chris');

DECLARE @IdValue INT = SCOPE_IDENTITY();

INSERT INTO dbo.InventoryTransferDetails (CTransferID, CQuantity, CBarcode) 
VALUES (@IdValue, 3, '734987598345');

Sql相关问答推荐

如何查询未命名对象的SON数组

如何在SQL查询中只比较日期时间的年份和月份(而忽略日期比较)?

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

出现5次后,将所有正斜杠替换为连字符

为表中每个缺少的引用创建新行

连接特定行号

在Oracle中,如何删除具有特定值的行,仅当它是重复的行?

如何更新SQLite数据库中的表?

BigQuery-当子查询不返回任何结果时,所有结果为零

为什么TRY_CONVERT返回一个XML验证错误而不是NULL?

具有多个条件的SQL否定

从类似JSON的字符串列创建新列

如何将insert语句重复n次使一个值递增?

违反了完整性约束-值存在时找不到父键

从重复值中获取最新值

使用 SQL 将列添加到 Access 数据库时出错

如何在 case 语句中使用聚合?

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

为什么这是 AND,OR with NULL 的真值表?

如何刷新在视图之上创建的表