来自输出子句的MSSQL更新集

时间:2019-06-26 07:55:31

标签: sql-server

上下文 我得到了一个由用户填充/调整的临时表。我们将其称为具有表tmpIDupdated_atprice列的表foreign_ID。每次用户输入新价格时,都会填充price列,并自动创建updated_atIDforeign_IDNULL,直到记录处理到另一个表时,此时我的foreign_ID应该包含另一个表的ID。

我会定期用价格更新表格,我们将其称为prices。以下是所有来自不同来源的价格,其中包括tmp表中的价格。 prices表具有列IDupdated_atprice的列。

问题 我想将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列。

感谢您的帮助!

1 个答案:

答案 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;