上下文
我得到了一个由用户填充/调整的临时表。我们将其称为具有表tmp
,ID
,updated_at
,price
列的表foreign_ID
。每次用户输入新价格时,都会填充price
列,并自动创建updated_at
和ID
。 foreign_ID
为NULL
,直到记录处理到另一个表时,此时我的foreign_ID
应该包含另一个表的ID。
我会定期用价格更新表格,我们将其称为prices
。以下是所有来自不同来源的价格,其中包括tmp
表中的价格。 prices
表具有列ID
,updated_at
,price
的列。
问题
我想将tmp
表中的数据插入prices
表中,并用foreign_ID
表中的相应ID
更新列prices
。如何在表中插入新行并在另一个表中更新/设置ID?
定期更新后,我希望得到的结果是prices
表中的一个新条目,其中包含尚未处理的新价格,而我的foreign_ID
表中的一个tmp
对应于ID
表中的prices
。
我知道我可以使用以下查询输出插入的ID:
insert into prices
output inserted.ID
select price
from tmp;
我正在努力查看如何使用inserted.ID
用上面的输出更新我的tmp.foreign_ID
列。
感谢您的帮助!
答案 0 :(得分:1)
您也可以将INSERT
子句中的值OUTPUT
插入另一个表,因此,如果需要这些值,您仍然可以引用它们。
如果没有适当的样本数据和行为,这只是一个示例,但是希望它能使您走上正确的道路,因为它向您展示了如何将inserted
中的值获取到另一个对象中。然后,您可以使用该对象执行所需的其他任务:
CREATE TABLE dbo.SomeTable (ID int IDENTITY(1,1),
SomeString varchar(10));
GO
DECLARE @IDs table (ID int);
INSERT INTO dbo.SomeTable (SomeString)
OUTPUT inserted.ID
INTO @IDs (ID)
VALUES('asdjgkde'),('sdflhdglf');
SELECT *
FROM @IDs;
GO
DROP TABLE dbo.SomeTable;